linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fix buffer overflow in udev_util_encode_string()
@ 2009-08-31 17:33 Florian Zumbiehl
  2009-09-01 10:56 ` Kay Sievers
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Florian Zumbiehl @ 2009-08-31 17:33 UTC (permalink / raw)
  To: linux-hotplug

Hi,

this is broken in such a strange way that I am not really sure whether
I hit the semantics expected by the callers - I hope you will be able to
figure it out? Untested, of course.

Florian

diff --git a/libudev/libudev-util.c b/libudev/libudev-util.c
index b07eabb..9a141db 100644
--- a/libudev/libudev-util.c
+++ b/libudev/libudev-util.c
@@ -448,28 +448,29 @@ int udev_util_encode_string(const char *str, char *str_enc, size_t len)
 {
 	size_t i, j;
 
-	if (str = NULL || str_enc = NULL || len = 0)
+	if (str = NULL || str_enc = NULL)
 		return -1;
 
-	str_enc[0] = '\0';
 	for (i = 0, j = 0; str[i] != '\0'; i++) {
 		int seqlen;
 
 		seqlen = utf8_encoded_valid_unichar(&str[i]);
 		if (seqlen > 1) {
+			if(len-j<seqlen)goto err;
 			memcpy(&str_enc[j], &str[i], seqlen);
 			j += seqlen;
 			i += (seqlen-1);
 		} else if (str[i] = '\\' || !is_whitelisted(str[i], NULL)) {
+			if(len-j<4)goto err;
 			sprintf(&str_enc[j], "\\x%02x", (unsigned char) str[i]);
 			j += 4;
 		} else {
+			if(len-j<1)goto err;
 			str_enc[j] = str[i];
 			j++;
 		}
-		if (j+3 >= len)
-			goto err;
 	}
+	if(len-j<1)goto err;
 	str_enc[j] = '\0';
 	return 0;
 err:

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2009-09-05 20:57 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-31 17:33 [PATCH] fix buffer overflow in udev_util_encode_string() Florian Zumbiehl
2009-09-01 10:56 ` Kay Sievers
2009-09-02 20:55 ` Karel Zak
2009-09-04 19:34 ` [PATCH] fix buffer overflow in udev_util_replace_whitespace() Florian Zumbiehl
2009-09-05  3:19 ` Andrey Borzenkov
2009-09-05  4:21 ` Florian Zumbiehl
2009-09-05 10:44 ` Alan Jenkins
2009-09-05 17:01 ` Florian Zumbiehl
2009-09-05 18:17 ` Alan Jenkins
2009-09-05 18:51 ` Andrey Borzenkov
2009-09-05 20:21 ` Florian Zumbiehl
2009-09-05 20:57 ` Florian Zumbiehl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).