[OpenBIOS] [commit] r722 - in trunk/openbios-devel: include/libc libc packages
repository service
svn at openbios.org
Fri Apr 2 10:33:08 CEST 2010
Author: mcayland
Date: Fri Apr 2 10:33:07 2010
New Revision: 722
URL: http://tracker.coreboot.org/trac/openbios/changeset/722
Log:
Switch the bootinfo-loader over to using strncasecmp rather than strcasecmp which should be much safer on binary buffersi of
unknown content/length.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>
Modified:
trunk/openbios-devel/include/libc/string.h
trunk/openbios-devel/libc/string.c
trunk/openbios-devel/packages/bootinfo-loader.c
Modified: trunk/openbios-devel/include/libc/string.h
==============================================================================
--- trunk/openbios-devel/include/libc/string.h Fri Apr 2 01:40:21 2010 (r721)
+++ trunk/openbios-devel/include/libc/string.h Fri Apr 2 10:33:07 2010 (r722)
@@ -52,6 +52,7 @@
extern char *strdup( const char *str );
extern int strcasecmp( const char *cs, const char *ct );
+extern int strncasecmp( const char *cs, const char *ct, size_t count );
extern char *strncpy_nopad( char *dest, const char *src, size_t n );
Modified: trunk/openbios-devel/libc/string.c
==============================================================================
--- trunk/openbios-devel/libc/string.c Fri Apr 2 01:40:21 2010 (r721)
+++ trunk/openbios-devel/libc/string.c Fri Apr 2 10:33:07 2010 (r722)
@@ -511,3 +511,18 @@
}
return __res;
}
+
+int
+strncasecmp( const char *cs, const char *ct, size_t count )
+{
+ register signed char __res;
+
+ while (count--) {
+ char ch1 = toupper(*cs), ch2 = toupper(*ct);
+ ct++;
+ if ((__res = ch1 - ch2) != 0 || !*cs++)
+ break;
+ }
+ return __res;
+}
+
Modified: trunk/openbios-devel/packages/bootinfo-loader.c
==============================================================================
--- trunk/openbios-devel/packages/bootinfo-loader.c Fri Apr 2 01:40:21 2010 (r721)
+++ trunk/openbios-devel/packages/bootinfo-loader.c Fri Apr 2 10:33:07 2010 (r722)
@@ -167,13 +167,13 @@
} else if (c == '>') {
tag = 0;
tagbuf[taglen] = '\0';
- if (strcasecmp(tagbuf, "chrp-boot") == 0) {
+ if (strncasecmp(tagbuf, "chrp-boot", 9) == 0) {
chrp = 1;
} else if (chrp == 1) {
- if (strcasecmp(tagbuf, "boot-script") == 0) {
+ if (strncasecmp(tagbuf, "boot-script", 11) == 0) {
script = 1;
scriptlen = 0;
- } else if (strcasecmp(tagbuf, "/boot-script") == 0) {
+ } else if (strncasecmp(tagbuf, "/boot-script", 12) == 0) {
script = 0;
bootscript[scriptlen] = '\0';
@@ -184,7 +184,7 @@
feval("-1 state-valid !");
break;
- } else if (strcasecmp(tagbuf, "/chrp-boot") == 0)
+ } else if (strncasecmp(tagbuf, "/chrp-boot", 10) == 0)
break;
}
} else if (tag && taglen < sizeof(tagbuf)) {
@@ -195,26 +195,26 @@
} else if (entity && c ==';') {
entity = 0;
tagbuf[taglen] = '\0';
- if (strcasecmp(tagbuf, "lt") == 0) {
+ if (strncasecmp(tagbuf, "lt", 2) == 0) {
bootscript[scriptlen++] = '<';
- } else if (strcasecmp(tagbuf, "gt") == 0) {
+ } else if (strncasecmp(tagbuf, "gt", 2) == 0) {
bootscript[scriptlen++] = '>';
- } else if (strcasecmp(tagbuf, "device") == 0) {
+ } else if (strncasecmp(tagbuf, "device", 6) == 0) {
strcpy(bootscript + scriptlen, device);
scriptlen += strlen(device);
- } else if (strcasecmp(tagbuf, "partition") == 0) {
+ } else if (strncasecmp(tagbuf, "partition", 9) == 0) {
if (partition != -1)
sprintf(bootscript + scriptlen, "%d", partition);
else
*(bootscript + scriptlen) = 0;
scriptlen = strlen(bootscript);
- } else if (strcasecmp(tagbuf, "directory") == 0) {
+ } else if (strncasecmp(tagbuf, "directory", 9) == 0) {
strcpy(bootscript + scriptlen, directory);
scriptlen += strlen(directory);
- } else if (strcasecmp(tagbuf, "filename") == 0) {
+ } else if (strncasecmp(tagbuf, "filename", 8) == 0) {
strcpy(bootscript + scriptlen, filename);
scriptlen += strlen(filename);
- } else if (strcasecmp(tagbuf, "full-path") == 0) {
+ } else if (strncasecmp(tagbuf, "full-path", 9) == 0) {
strcpy(bootscript + scriptlen, bootpath);
scriptlen += strlen(bootpath);
} else { /* unknown, keep it */
More information about the OpenBIOS
mailing list