Jak dobrze jest znać się nieco na technologiach internetowych przekonałem się dziś po raz kolejny.
System komunikacji z moim promotorem nagle odmówił współpracy – ciągle twierdził, że data, którą wprowadziłem jest błędna. Mimo, że była taka jakiej potrzebował. Pomyślałem – zajrzę do źródła i będę widział co tam sprawdza.
Niestety byłem zbyt wielkim optymistą spodziewając się jakiegoś regexpa:
function CheckTime(cntrl, emptyok)
{
var h = "";
var m = "";
var s = cntrl.value.replace(/^s*/, '').replace(/s*$/, '');
if (s == "" && emptyok == 1)
{
cntrl.value = "";
return 1;
}
var i = 0;
while (s != "" && "0123456789".indexOf(s.charAt(0)) >= 0 && i < 6)
{
h = h + s.charAt(0);
s = s.substr(1,s.length);
i++;
}
if (h == "") return 0;
var hn = parseInt(h,10);
if (hn < 0 || hn > 23) return 0;
if (hn < 10)
h = "0" + hn;
else
h = "" + hn;
s = s.substr(1,s.length);
i = 0;
while (s != "" && "0123456789".indexOf(s.charAt(0)) >= 0 && i < 6)
{
m = m + s.charAt(0);
s = s.substr(1,s.length);
i++;
}
if (m == "") return 0;
var mn = parseInt(m,10);
if (mn < 0 || mn > 59) return 0;
if (mn < 10)
m = "0" + mn;
else
m = "" + mn;
cntrl.value = h + ":" + m;
return 100*hn + mn + 1;
}
Stwierdziłem, że szkoda czasu na zgadywankę pod tytułem "co autor miał na myśli". Zastanawiając się jakie możliwości obejścia mam pod ręką myślałem, że może wywołam submit() dla tego formularza i po krzyku, niestety nie mogłem mieć pewności, że coś nie pójdzie nie tak, bo:
function multi()
{
str_kod = str_opis = ""
for (var i = 0; i < document.forms[0].elements.length; i++)
if (document.forms[0].elements[i].name.substring(0, 1) == "c" &&
document.forms[0].elements[i].checked)
{
str_kod += document.forms[0].elements[i + 1].value;
str_opis += document.forms[0].elements[i + 2].value;
}
if (str_kod == "")
{
if (document.forms[0].elements.length > 0 &&
document.forms[1].R.value < 0 &&
document.forms[1].U.value != '0' &&
!confirm('Nie zaznaczono żadnego dodatkowego adresata.nnnCzy chcesz kontynuować wysyłanie?'))
return;
if (saved_W != "")
{
document.forms[1].W.value = saved_W;
document.forms[1].Z.value = saved_Z;
}
document.forms[1].submit();
}
else
{
if (saved_W == "")
{
saved_W = document.forms[1].W.value;
saved_Z = document.forms[1].Z.value;
}
var Y = document.forms[1].Y.value;
var Y = RemoveBlanks(Y);
if (Y == "pracownik") Y = "C";
else if (Y == "nauczyciel") Y = "N";
else if (Y == "student") Y = "T";
else if (Y == "rozklad") Y = "Z";
else if (Y == "rozklad2") Y = "Y";
else if (Y == "przedmiot") Y = "P";
else if (Y == "grupajez") Y = "J";
else if (Y == "kandydat") Y = "K";
else if (Y == "kursant") Y = "U";
else if (Y.length == 1) Y = "";
else
{
alert('Błąd SUSZI... [' + Y.length + ':' + Y + ']');
exit;
}
str_kod = '#' + saved_Z + ':' + Y + ':' + document.forms[1].X.value + ':' +
str_kod;
str_opis = '#' + saved_W + str_opis;
document.forms[1].Z.value = str_kod;
document.forms[1].W.value = str_opis;
document.forms[1].submit();
}
}
Przypomniało mi się na szczęście, że przecież nazwy funkcji są zwyczajnie zmiennymi w javascript. Wiedząc, że CheckDate wywołuje błąd, kiedy nie zwraca 1, postanowiłem pobawić się w hackera (przy pomocy niezastąpionego firebuga):
CheckTime = function() {return 1}
Zaczął mi marudzić, że datę mam z przeszłości (2009-11-14), no to jeszcze jeden mały hack:
FutureDate = function() {return 20;}
Teraz trzymam kciuki, żeby mój promotor dowiedział się, ze skończyłem pisać pracę. Jeśli mają w tym systemie takie same bugi po stronie serwera - nie uda mi się ich tak łatwo obejść ;)