Skip to content

Commit 25ae592

Browse files
committed
Fix strncasecmp bounds and alpha-only case folding
+ Added unit tests for string.c
1 parent 0a738ac commit 25ae592

3 files changed

Lines changed: 376 additions & 7 deletions

File tree

src/string.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,20 @@ int strcmp(const char *s1, const char *s2)
117117
}
118118
#endif /* Renesas CCRX */
119119

120+
static int is_alpha(int c)
121+
{
122+
return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
123+
}
124+
120125
int strcasecmp(const char *s1, const char *s2)
121126
{
122127
int diff = 0;
123128

124129
while (!diff && *s1) {
125130
diff = (int)*s1 - (int)*s2;
126131

127-
if ((diff == 'A' - 'a') || (diff == 'a' - 'A'))
132+
if (((diff == 'A' - 'a') || (diff == 'a' - 'A')) &&
133+
(is_alpha((unsigned char)*s1) || is_alpha((unsigned char)*s2)))
128134
diff = 0;
129135

130136
s1++;
@@ -142,12 +148,13 @@ int strncasecmp(const char *s1, const char *s2, size_t n)
142148
while (!diff && *s1) {
143149
diff = (int)*s1 - (int)*s2;
144150

145-
if ((diff == 'A' - 'a') || (diff == 'a' - 'A'))
151+
if (((diff == 'A' - 'a') || (diff == 'a' - 'A')) &&
152+
(is_alpha((unsigned char)*s1) || is_alpha((unsigned char)*s2)))
146153
diff = 0;
147154

148155
s1++;
149156
s2++;
150-
if (++i > n)
157+
if (++i >= n)
151158
break;
152159
}
153160
return diff;

tools/unit-tests/Makefile

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,11 @@ LDFLAGS+=-ftest-coverage
2525

2626

2727

28-
TESTS:=unit-parser unit-extflash unit-spi-flash unit-aes128 unit-aes256 \
29-
unit-chacha20 unit-pci unit-mock-state unit-sectorflags unit-image \
30-
unit-nvm unit-nvm-flagshome unit-enc-nvm unit-enc-nvm-flagshome \
31-
unit-delta unit-update-flash unit-update-ram unit-pkcs11_store
28+
TESTS:=unit-parser unit-extflash unit-string unit-spi-flash unit-aes128 \
29+
unit-aes256 unit-chacha20 unit-pci unit-mock-state unit-sectorflags \
30+
unit-image unit-nvm unit-nvm-flagshome unit-enc-nvm \
31+
unit-enc-nvm-flagshome unit-delta unit-update-flash unit-update-ram \
32+
unit-pkcs11_store
3233

3334
all: $(TESTS)
3435

@@ -94,6 +95,9 @@ unit-extflash: ../../include/target.h unit-extflash.c
9495
unit-spi-flash: ../../include/target.h unit-spi-flash.c
9596
gcc -o $@ $^ $(CFLAGS) $(LDFLAGS)
9697

98+
unit-string: ../../include/target.h unit-string.c
99+
gcc -o $@ $^ $(CFLAGS) -DDEBUG_UART -DPRINTF_ENABLED $(LDFLAGS)
100+
97101
unit-aes128: ../../include/target.h unit-extflash.c
98102
gcc -o $@ $^ $(CFLAGS) $(LDFLAGS)
99103

0 commit comments

Comments
 (0)