Fossil SCM
Allow upper or lower case letters for the captcha code. Also, recognize "O" as a "0". Ticket [b142647bfa04a]
Commit
7f56910f0e244e25962a135448715f050719da75
Parent
8205c01cd4087c1…
1 file changed
+11
-1
+11
-1
| --- src/captcha.c | ||
| +++ src/captcha.c | ||
| @@ -467,19 +467,29 @@ | ||
| 467 | 467 | */ |
| 468 | 468 | int captcha_is_correct(void){ |
| 469 | 469 | const char *zSeed; |
| 470 | 470 | const char *zEntered; |
| 471 | 471 | const char *zDecode; |
| 472 | + char z[30]; | |
| 473 | + int i; | |
| 472 | 474 | if( !captcha_needed() ){ |
| 473 | 475 | return 1; /* No captcha needed */ |
| 474 | 476 | } |
| 475 | 477 | zSeed = P("captchaseed"); |
| 476 | 478 | if( zSeed==0 ) return 0; |
| 477 | 479 | zEntered = P("captcha"); |
| 478 | 480 | if( zEntered==0 || strlen(zEntered)!=8 ) return 0; |
| 479 | 481 | zDecode = captcha_decode((unsigned int)atoi(zSeed)); |
| 480 | - if( strcmp(zDecode,zEntered)!=0 ) return 0; | |
| 482 | + assert( strlen(zDecode)==8 ); | |
| 483 | + if( strlen(zEntered)!=8 ) return 0; | |
| 484 | + for(i=0; i<8; i++){ | |
| 485 | + char c = zEntered[i]; | |
| 486 | + if( c>='A' && c<='F' ) c += 'a' - 'A'; | |
| 487 | + if( c=='O' ) c = '0'; | |
| 488 | + z[i] = c; | |
| 489 | + } | |
| 490 | + if( memcmp(zDecode,z,8)!=0 ) return 0; | |
| 481 | 491 | return 1; |
| 482 | 492 | } |
| 483 | 493 | |
| 484 | 494 | /* |
| 485 | 495 | ** Generate a captcha display together with the necessary hidden parameter |
| 486 | 496 |
| --- src/captcha.c | |
| +++ src/captcha.c | |
| @@ -467,19 +467,29 @@ | |
| 467 | */ |
| 468 | int captcha_is_correct(void){ |
| 469 | const char *zSeed; |
| 470 | const char *zEntered; |
| 471 | const char *zDecode; |
| 472 | if( !captcha_needed() ){ |
| 473 | return 1; /* No captcha needed */ |
| 474 | } |
| 475 | zSeed = P("captchaseed"); |
| 476 | if( zSeed==0 ) return 0; |
| 477 | zEntered = P("captcha"); |
| 478 | if( zEntered==0 || strlen(zEntered)!=8 ) return 0; |
| 479 | zDecode = captcha_decode((unsigned int)atoi(zSeed)); |
| 480 | if( strcmp(zDecode,zEntered)!=0 ) return 0; |
| 481 | return 1; |
| 482 | } |
| 483 | |
| 484 | /* |
| 485 | ** Generate a captcha display together with the necessary hidden parameter |
| 486 |
| --- src/captcha.c | |
| +++ src/captcha.c | |
| @@ -467,19 +467,29 @@ | |
| 467 | */ |
| 468 | int captcha_is_correct(void){ |
| 469 | const char *zSeed; |
| 470 | const char *zEntered; |
| 471 | const char *zDecode; |
| 472 | char z[30]; |
| 473 | int i; |
| 474 | if( !captcha_needed() ){ |
| 475 | return 1; /* No captcha needed */ |
| 476 | } |
| 477 | zSeed = P("captchaseed"); |
| 478 | if( zSeed==0 ) return 0; |
| 479 | zEntered = P("captcha"); |
| 480 | if( zEntered==0 || strlen(zEntered)!=8 ) return 0; |
| 481 | zDecode = captcha_decode((unsigned int)atoi(zSeed)); |
| 482 | assert( strlen(zDecode)==8 ); |
| 483 | if( strlen(zEntered)!=8 ) return 0; |
| 484 | for(i=0; i<8; i++){ |
| 485 | char c = zEntered[i]; |
| 486 | if( c>='A' && c<='F' ) c += 'a' - 'A'; |
| 487 | if( c=='O' ) c = '0'; |
| 488 | z[i] = c; |
| 489 | } |
| 490 | if( memcmp(zDecode,z,8)!=0 ) return 0; |
| 491 | return 1; |
| 492 | } |
| 493 | |
| 494 | /* |
| 495 | ** Generate a captcha display together with the necessary hidden parameter |
| 496 |