Validate instruction addresses and memory bounds in the emulator
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 75/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- cpp
- Área
- operating-systems
Línea de trabajo
Empieza en emulator/main.c, en el bucle de decodificación de instrucciones identificado en el issue. Sigue cómo se usan BASE, los valores de las instrucciones y las direcciones calculadas antes de leer la memoria, y después revisa las instrucciones existentes para compilar o ejecutar el emulador. El trabajo estará terminado cuando las bases, direcciones e instrucciones malformadas se detengan de forma segura con errores descriptivos y los programas válidos sigan funcionando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
The emulator derives memory addresses from instruction values without validating them, which can read beyond the allocated memory and crash or corrupt state.
Problem
The code computes address = memory[i] % BASE and reads memory[address] for every instruction. If the program or base value is malformed, address may be outside the bounds of the memory array. Similarly, the instruction stream itself is not validated before decoding.
Expected behavior
- Check
BASEandaddressranges before reading memory. - Reject instructions that are invalid for the current architecture.
- Stop safely with a descriptive error on malformed programs.
Relevant code
emulator/main.cin theforloop that decodes instructions and accesses memory.
Suggested fix
Add range checks before each memory read and each address calculation. Reject BASE <= 0 and guard memory accesses with 0 <= address && address < MEMORY_SIZE before dereferencing them. Report invalid instructions instead of falling through to undefined behavior.
- Lenguaje dominante
- C++
- Estrellas
- 0
- Forks
- 0
- Merge medio
- 1 min
- PR fusionados (30 d)
- 4
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
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 DavidSkillman/LittleManCompiler
-
bug copilot enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
-
bug compiler copilot good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Todos los issues de DavidSkillman/LittleManCompiler
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
ROCm/rocm-systems#15475 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
Sendspin/sendspin-cpp#257 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
pocoproject/poco#5664 ·
Los mantenedores suelen responder en 2 días
-
community:good-first-issue kind:bug kind:test scope:control status:needs-triage vehicle:rover
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
PX4/PX4-Autopilot#29727 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día