Validate instruction addresses and memory bounds in the emulator

Abierto Apto para principiantes
#7 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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

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

bug copilot

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 BASE and address ranges 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.c in the for loop 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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de DavidSkillman/LittleManCompiler

Todos los issues de DavidSkillman/LittleManCompiler

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.