[IRC-DEV] De los errores se aprende (rename_user)

Jesus Cea Avion jcea at argo.es
Wed Oct 15 18:28:25 CEST 2003


Se ha separado la función "m_rename" original a dos funciones:
"m_rename" y "rename_user", con la idea de que la segunda función se
generalice y pueda llamarse desde "m_nick_*" o cuando se prohibe o
suspende un nick, por ejemplo.

El parche contiene dos errores graves. Los podeis ver en:

<http://devel.irc-hispano.org/bin/cvsweb/viewcvs.cgi/ircd/s_user.c.diff?r1=1.218&r2=1.219&sortby=date>

Falta el segmento de código a partir de la línea 3585, donde se
comprueba que el "rename" se realice sobre un usuario local. Los
"rename" a usuarios remotos deben propagarse, pero no se procesan de
forma local, ya que quien debe cambiar el nick es el nodo "raíz" del
usuario en cuestión. Este error es CRÍTICO, ya que crea inconsistencias
en la red. NO es peor porque antes de que las inconsistencias sean
demasiado grandes salta el segundo error.

El segundo error es la línea 3291, donde el "assert()" tiene la
condición escrita al revés. En el código original se comprueba que el
rename se realice sobre un usuario que NO sea local, cuando la
comprobación debe ser la contraria. Este error es FATAL, ya que mata el
nodo de IRC.

Ambos errores se podrían haber detectado de forma simple con unas
pruebas correctas y exhaustivas, y con un análisis funcional bien hecho,
como se detalla, por ejemplo, en
http://mailman.argo.es/pipermail/irc-dev/2003-September/003118.html

Es muy buena idea aprender a ser sistemáticos y a analizar con detalle
las "cadenas de dominó" que supone cualquier cambio en el código, por
mínimo y aparentemente trivial que parezca. Es más fácil hacer esto al
escribir el parche que para mí, a posteriori, revisarlo. ¡¡Ahorradme un
poquito de curro! :-p

-- 
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea at argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
                                      _/_/    _/_/          _/_/_/_/_/
PGP Key Available at KeyServ   _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz




More information about the IRC-Dev mailing list