euc.c.patch   [plain text]


--- euc.c.orig	Tue May 20 15:21:44 2003
+++ euc.c	Wed Jun 18 12:01:30 2003
@@ -48,6 +48,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 
 rune_t	_EUC_sgetrune(const char *, size_t, char const **);
 int	_EUC_sputrune(rune_t, char *, size_t, char **);
@@ -135,11 +136,10 @@
 	rune_t rune = 0;
 	int len, set;
 
-	if (n < 1 || (len = CEI->count[set = _euc_set(*string)]) > n) {
-		if (result)
-			*result = string;
+	if (result)
+		*result = string;
+	if (n < 1 || (len = CEI->count[set = _euc_set(*string)]) > n)
 		return (_INVALID_RUNE);
-	}
 	switch (set) {
 	case 3:
 	case 2:
@@ -151,6 +151,11 @@
 		while (len-- > 0)
 			rune = (rune << 8) | ((u_int)(*string++) & 0xff);
 		break;
+	}
+	if (!isrune(rune)) {
+		if (result)
+			(*result)++;
+		return (_INVALID_RUNE);
 	}
 	if (result)
 		*result = string;