git » orga2-tp1.git » commit 0fe646e

Manejar correctamente errores de strdup2

author Rodrigo Campos
2011-04-18 02:27:47 UTC
committer Rodrigo Campos
2011-04-18 02:34:09 UTC
parent b6b79cc3c9eef8153760ec1c6dd84843e943df84

Manejar correctamente errores de strdup2

Si strdup2 no puede allocar memoria nos devuelve NULL en eax. Nosotros
lo estabamos asignando incondicionalmente al char* del nodo. Pero eso
podria ser un problema si strdup2 nos devolvio NULL, ya que al
imprimirlo daria segfault.

Asique nos fijamos si strdup2 nos devolvio un puntero coherente y si
fallo liberamos toda la memoria allocada y terminamos.

bintree.asm +14 -0

diff --git a/bintree.asm b/bintree.asm
index 8c9a31b..22bf8d8 100644
--- a/bintree.asm
+++ b/bintree.asm
@@ -66,7 +66,14 @@ insertar:
 	push dword .nom
 	call strdup2
 	add esp, 4
+	; si fallamos al allocar memoria para el strdup, no tenemos mucho mas
+	; para hacer: borramos la memoria allocada para el nodo y salimos
+	; XXX: asignamos eax a .nNom antes de checkar porque, en caso que eax
+	; sea cero, nos queda NULL en .nNom y el free que se llama despues al
+	; borrar la memoria del nodo no deberia ser problema (free de NULL va ok)
 	mov .nNom, eax
+	cmp eax, 0
+	je .borrarme
 
 	; Si es el arbol vacio (apunta a NULL), entonces devolvemos el arbol que tiene solo este nodo
 	; Si no es el arbol vacio, insertamos el nodo
@@ -80,6 +87,13 @@ insertar:
 	push ebx ; nodo **arbol, 1ยบ param
 	call buscar_e_insertar
 	add esp, 8
+	jmp .fin
+
+.borrarme:
+	push esi; el nodo que creamos
+	call borrar_nodo
+	add esp, 4
+	jmp .fin
 
 .fin:
 	pop ebx