Hola a todos los miembros de la lista, hace un par de dias que estoy
analizando un codigo (concretamente de metasploit 3.2) y he llegado a
lib/rex/text.rb. Luego de ver unos cuantos metodos me he trabado en uno
(self.converge_sets), aca se los dejo libre para que lo vean. Lo he
traceado
con NetBeans para ver si lo entendia pero me sigo trabando en la linea
marcado con <---------, las otras partes ya las tengo bastante claras
pero
no puedo entender que utilidad tiene ese bucle while.
Este metodo lo que hace es devolver un string con un tamaño igual a la
cantidad de elementos de sets, agarra cada caracter basandose en el
offsets,
me ha costado un poco analizarla ya que no tengo mucha experiencia con
recursividad pero ya he logrado entender como trabaja. Aunque la linea
que
les marque me esta dando fuertes dolores de cabeza, cualquier ayuda sera
agradecida.
def converge_sets(sets, idx, offsets, length) # :nodoc:
buf = sets[idx][offsets[idx]].chr
if (sets[idx + 1])
buf += converge_sets(sets, idx + 1, offsets, length)
else
while (idx >= 0 and ((offsets[idx] = (offsets[idx] + 1)
%
sets[idx].length)) == 0) <-------
idx -= 1
end
if (idx < 0)
raise RuntimeError, "Maximum permutations
reached"
end
end
buf
end
puts converge_sets([“ABCDEFGHIJKLMNOPQRSTUVWXYZ”,
“abcdefghijklmnopqrstuvwxyz”, “0123456789”],0,[0,0,0],0)
Esto se puede llamar con sets asi: [Rex::Text::UpperAlpha,
Rex::Text:::LowerAlpha, Rex::Text::Numerals]
pero lo deje asi para mirarlo mas rapidamente con NetBeans
Antes que nada les doy gracias por su tiempo, y quedo a la espera de una
pronta respuesta. Atentamente Gustavo Javier desde Argentina.
P.D.: Si necesitan algo o no quedo clara la pregunta, diganlo que lo
comentare con mas tiempo.