
Laboratorio di ricerca sulla sicurezza autorizzato: riproduzione di CVE-2025-32958 (GHSA-8c7v-vccv-cx4q) — GITHUB_TOKEN divulgato negli artefatti del workflow da remoteBuild.yml di Adept (snapshot di AdeptLanguage/Adept @ 6a64554)
Artefatto di ricerca automatizzato — non è il progetto upstream.
Questo repository è un laboratorio usa e getta costruito da un sistema automatizzato per una tesi magistrale presso l'Université Laval sulla riproduzione di vulnerabilità pubblicate nei workflow di GitHub Actions. È uno snapshot verbatim di
AdeptLanguage/Adeptal commit6a6455463213dabe52d49ceaaebd1f13cfee9018(2025-04-01), ridistribuito sotto la licenza del progetto stesso, il cui file è incluso invariato in questo snapshot.Il progetto upstream non è coinvolto, non è mai preso di mira, e la vulnerabilità studiata qui è già pubblica. Ogni segreto e variabile in questo repository è un valore fittizio generato casualmente — nessuna credenziale reale è presente. I riferimenti alle action e le immagini dei runner sono bloccati a ciò a cui risolvevano il 2025-04-01; consulta
pinning.mdnell'output dell'harness per ogni modifica apportata allo snapshot.Domande o obiezioni: [email protected]
Un linguaggio velocissimo per la programmazione generica.
Scarica Adept v2.7 per Windows
Scarica le estensioni di cross-compilazione di Adept v2.7
Libreria standard di Adept v2.7
Adept v2.7: lavorare con librerie nazionali ed estere
Tap Homebrew per Adept v2.7 su MacOS
Evidenziazione sintassi essenziale Vim per Adept v2.7
Evidenziazione sintassi VSCode per Adept v2.7
Language Server VSCode per Adept v2.7
Evidenziazione sintassi Sublime Text per Adept v2.7
Evidenziazione sintassi Geany per Adept v2.7
adept [filename] [options]
Puoi opzionalmente usare adept2-7 invece di adept se hai installato più versioni.
import basics
func main {
print("Hello World!")
}
import basics
func main {
name String = "Alan"
age int = 36
height uint = 189
print("Name is " + name)
print("Age is " + age)
print("Height is " + height + " cm")
}
import basics
func main {
greet("Alice")
}
func greet(name String) {
print("Hello " + name)
}
import basics
record Person (name String, age int) {
func print {
print(this.name + " is " + this.age + " years old")
}
}
func main {
Person("John Smith", 36).print()
}
import basics
struct Configuration (
filename String,
numBatteries int,
numPorts int,
){
constructor(filename String) {
this.filename = filename.commit()
this.numBatteries = 4
this.numPorts = 10
}
}
func toString(config Configuration) String {
return config.filename + ":" + config.numBatteries + ":" + config.numPorts
}
func main {
print(Configuration("settings.config"))
}
import basics
func main {
x, y int = 0
x++
y++
addOneTo(&x)
print("x = " + x)
print("y = " + y)
}
func addOneTo(pointerToNumber *$T~__number__) {
(*pointerToNumber)++
}
import basics
func main {
name String = scan("What is your name? ")
age int = scanInt("How old are you? ")
// If conditional
if name == "Isaac" {
print("Hello Isaac :)")
} else {
print("Nice to meet you " + name)
}
// Unless conditional
unless age > 21 {
print("You are too young to drink")
}
// While loops
while age < 18 {
print("**birthday**")
age += 1
}
print("You are now old enough to smoke")
// Until loops
until age >= 21 {
print("**birthday**")
age += 1
}
print("You are now old enough to drink")
}
import basics
record Invitation (to, from String, priority int)
func main {
invites <Invitation> List
invites.add(Invitation("Isaac", "Peter", 4))
invites.add(Invitation("Mr. Smith", "Mrs. Smith", 12))
invites.add(Invitation("James", "Paul", 3))
each Invitation in invites {
printf("invites[%zu] = %S\n", idx, toString(it))
}
}
func toString(invite Invitation) String {
return invite.to + " invited " + invite.from + " with priority " + invite.priority
}
/*
For values that use ownership-based memory management
(e.g. String, List, Grid)
we must transfer ownership if we want to keep them
alive for longer than their owner's scope
*/
import basics
func main {
everyone <String> List = getEveryoneAttending()
each fullname String in everyone {
print("=> " + fullname)
}
}
func getEveryoneAttending() <String> List {
everyone <String> List
person1 String = getFullnameReturnImmediately("Alice", "Golden")
person2 String = getFullnameStoreAndThenLaterReturn("Bob", "Johnson")
// Commit ownership of strings held by 'person1' and 'person2'
// to be managed by the list
everyone.add(person1.commit())
everyone.add(person2.commit())
// Commit ownership of the list to the caller
return everyone.commit()
}
func getFullnameReturnImmediately(firstname, lastname String) String {
// '.commit()' is not necessary here
return firstname + " " + lastname
}
func getFullnameStoreAndThenLaterReturn(firstname, lastname String) String {
fullname String = firstname + " " + lastname
// Ownership of the result is held by 'fullname',
// so we must transfer ownership to the caller in order
// to keep it alive after this function returns
// '.commit()' is necessary here
return fullname.commit()
}
import basics
func main {
print(makeNumericSkewer())
print(makeAlphabetSkewer())
}
func makeNumericSkewer String {
// Example output: `0-2-4-6-8-10-13-16-19-22-25-28`
skewer String
while continue preparing {
skewer.append(skewer.length)
if skewer.length < 30 {
skewer.append("-")
continue preparing
}
}
return skewer.commit()
}
func makeAlphabetSkewer String {
// Example output: `a-c-e-g-i-k-m-o-q-s-u-w-y`
skewer String
while still_making_skewer : skewer.length < 30 {
skewer.append('a'ub + skewer.length as ubyte)
if skewer[skewer.length - 1] == 'y'ub {
break still_making_skewer
}
skewer.append("-")
}
return skewer.commit()
}
import basics
// Will be re-evaluated with each use
define GREETING = "Welcome"
define STRANGER_NAME = "guest"
define WELCOME_MESSAGE = GREETING + " " + STRANGER_NAME + "!"