mirror of
https://github.com/byteworksinc/ORCALib.git
synced 2024-06-10 09:29:29 +00:00
strncmp: Fix issues related to very large n values.
This fixes the following issues: *If n was 0x80000000 or greater, strncmp would return 0 without performing a comparison. *If n was 0x1000000 or greater, strncmp might compare fewer characters than it should because the high byte of n was effectively ignored, causing it to return 0 when it should not. Here is an example demonstrating these issues: #pragma memorymodel 1 #include <stdlib.h> #include <string.h> #include <stdio.h> #define LEN 100000 int main(void) { char *s1 = malloc(LEN+1); char *s2 = malloc(LEN+1); if (!s1 || !s2) return 0; for (unsigned long i = 0; i < LEN; i++) { s2[i] = s1[i] = '0' + (i & 0x07); } s1[LEN] = 'x'; return strncmp(s1,s2,0xFFFFFFFF); }
This commit is contained in:
parent
bbfad1e299
commit
9d42552756
|
@ -1070,7 +1070,6 @@ flag equ 1 return flag
|
|||
|
||||
ldy #0 scan until the end of string is reached
|
||||
ldx n+2 or a difference is found
|
||||
bmi equal
|
||||
bne lb0
|
||||
ldx n
|
||||
beq equal
|
||||
|
@ -1082,9 +1081,11 @@ lb1 lda [s1],Y
|
|||
bne lb3
|
||||
dex
|
||||
bne lb1a
|
||||
lda n+2
|
||||
ldx n+2
|
||||
beq equal
|
||||
dec n+2
|
||||
dex
|
||||
stx n+2
|
||||
ldx #0
|
||||
lb1a iny
|
||||
bne lb1
|
||||
inc s1+2
|
||||
|
|
Loading…
Reference in New Issue
Block a user