Negative encoding value crashes the decoder

Aperta Adatta ai principianti
#6 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
84/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
swift
Ambito
tooling

Direzione di ricerca

Inizia da String.Encoding+JSONCodable.swift:107 e segui la gestione numerica fino a Value.swift:94. Esegui il reproducer con valori di encoding negativi e superiori a Int.max, quindi verifica che il decoding generi un errore invece di causare un trap e che xcprojformatter non termini più con un crash.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

A file reference with a negative encoding traps instead of throwing:

let json = #"{"default-configuration":"Debug","localizations":{"development":"en"},"files":[{"path":"a.txt","encoding":-1}]}"#
_ = try XCSchema.Project(jsonRepresentation: Data(json.utf8))
// Fatal error: Negative value is not representable

xcprojformatter dies the same way (exit 133).

It's UInt(Int(with: coder)) in String.Encoding+JSONCodable.swift:107. Values above Int.max (e.g. 9223372036854775808) crash too, because NSNumber.intValue in Value.swift:94 wraps them negative. UInt(exactly:) plus a thrown error would fix it.

main @ c132630, macOS 26, Swift 6.3.3

Lingua principale
Swift
Stelle
384
Fork
12
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di apple/xcode-project-format

Tutte le issue di apple/xcode-project-format

Issue simili

Altre issue su Swift

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.