Four silent bugs: IsRequiredPhrase.license_expression returns None, find_in_path ignores later PATH changes, duplicate dict keys override license mappings
Los mantenedores suelen responder en 2 días
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- Medio día
- Aptitud para principiantes
- 65/100
Línea de trabajo
Empieza con el punto 1 en src/licensedcode/required_phrases.py cerca de la línea 205, donde la propiedad license_expression evalúa self.rule.license_expression sin devolverlo, y revisa cómo leen sus valores las otras propiedades de esa clase. El punto 2 está en src/commoncode/command.py alrededor de la línea 319, donde find_in_path evalúa searchable_paths() en el momento de la importación. Ejecuta un script pequeño que cambie PATH después de la importación para reproducirlo. El punto 3 requiere una decisión de los mantenedores sobre los valores previstos en src/packagedcode/rubygems.py y src/packagedcode/alpine.py, así que déjalo como está a menos que el hilo lo resuelva. Está terminado cuando las propiedades corregidas devuelven los valores esperados y las pruebas relevantes pasan.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
A static scan of src/ found four bugs that fail silently (no exception).
Each was reproduced with a small standalone script.
1. IsRequiredPhrase.license_expression always returns None
src/licensedcode/required_phrases.py (~line 205):
@property
def license_expression(self):
self.rule.license_expression # missing `return`
Repro: IsRequiredPhrase(rule=<rule with license_expression="mit">, ...) .license_expression returns None.
Fix: return self.rule.license_expression.
2. find_in_path ignores PATH changes made after import
src/commoncode/command.py (~line 319):
def find_in_path(filename, searchable_paths=searchable_paths()):
The default is evaluated once at import time, so PATH changes made afterwards
are ignored. The parameter also shadows the searchable_paths() function.
Repro: import the module, then prepend a directory containing mytool to
os.environ["PATH"]. find_in_path("mytool") returns None, but
find_in_path("mytool", searchable_paths()) returns the path.
Fix: default to None and call searchable_paths() inside the function.
3. Duplicate dict keys with conflicting values silently override mappings
Python keeps only the last value, so the earlier entries are dead.
src/packagedcode/rubygems.py(LICENSES_MAPPING, lines 679-680):
'LGPL'maps to'lgpl'and then to'lgpl-2.0-plus'.src/packagedcode/alpine.py(DECLARED_TO_SPDX):'as-is'(lines 1619, 1701):licenseref-scancode-free-unknownvs
licenseref-scancode-unknown-license-reference'custom:tu-berlin-2.0'(lines 1690, 1715):
licenseref-scancode-unknown-license-referencevstu-berlin-2.0
The maintainers should decide which value is intended and remove the other.
4. Duplicate key in default ignores (harmless, cleanup)
src/commoncode/ignore.py lines 204-205 repeat "autogen.sh".
Environment
Found by static analysis (ruff F601, B008, B018) at commit 05a98f66.
Please verify the intended values for item 3 before changing them.
- Lenguaje dominante
- Python
- Estrellas
- 2.7k
- Forks
- 848
- Merge medio
- 2 d 19 h
- PR fusionados (30 d)
- 8
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de aboutcode-org/scancode-toolkit
-
scancode aborts when encountering a broken RPM archivePosiblemente ocupada @adeba4343-web la tomó hace 2 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
aboutcode-org/scancode-toolkit#5407 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
parse_maintainer_name_email returns empty name and wrong email when string has "@" but no angle bracketsPosiblemente ocupada @pujitha24 la tomó hace 3 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
aboutcode-org/scancode-toolkit#5402 ·
Los mantenedores suelen responder en 2 días
-
bug: Unreachable JSON extension and format validation in validate_input_pathPosiblemente ocupada @0Cymantek0 la tomó hace 24 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
aboutcode-org/scancode-toolkit#5351 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
CycloneDX output: metadata.properties[].value emits JSON array instead of stringPosiblemente ocupada @0Cymantek0 la tomó hace 23 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
aboutcode-org/scancode-toolkit#5349 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Duplicate 'COPYLEFT' entries in legal file classification names in legal.py and classify.pyPosiblemente ocupada @Pradeepbeleri la tomó hace 51 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
aboutcode-org/scancode-toolkit#5319 · 2 comentarios ·
Los mantenedores suelen responder en 2 días
Todos los issues de aboutcode-org/scancode-toolkit
Issues similares
-
Server mode OAuth2: 'NoneType' object is not subscriptable on every request after re-submitting the OAuth2 login while already logged inPosiblemente ocupada @Rarasinhoo la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
pgadmin-org/pgadmin4#10733 ·
Los mantenedores suelen responder en 3 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
aws-samples/sample-per-model-bedrock#752 ·
Los mantenedores suelen responder en 1 día
-
lesson-submission pending-review
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
Ikalus1988/MisakaNet#4452 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
OCHA-DAP/topo-tools#250 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
Los mantenedores suelen responder en 1 día