svn commit: samba r3749 - in branches/SAMBA_4_0/source/torture/local: .

tridge at samba.org tridge at samba.org
Mon Nov 15 07:31:17 GMT 2004


Author: tridge
Date: 2004-11-15 07:31:16 +0000 (Mon, 15 Nov 2004)
New Revision: 3749

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=3749

Log:
don't consider it a failure if we fail to re-encode a codepoint above
1M, or in the case of non-UTF charsets, above 256


Modified:
   branches/SAMBA_4_0/source/torture/local/iconv.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/local/iconv.c
===================================================================
--- branches/SAMBA_4_0/source/torture/local/iconv.c	2004-11-15 06:59:03 UTC (rev 3748)
+++ branches/SAMBA_4_0/source/torture/local/iconv.c	2004-11-15 07:31:16 UTC (rev 3749)
@@ -128,21 +128,7 @@
 		last_charset = charset;
 	}
 
-#if 0
-	int i;
-	for (i=0;i<50;i++) {
-		ptr_in = inbuf;
-		ptr_out = buf1;
-		size_in1 = size;
-		outsize1 = sizeof(buf1);
-
-		memset(ptr_out, 0, outsize1);
-		errno = 0;
-		ret1 = smb_iconv(cd2, &ptr_in, &size_in1, &ptr_out, &outsize1);
-		errno1 = errno;
-	}
-#endif
-
+	/* internal convert to charset - placing result in buf1 */
 	ptr_in = inbuf;
 	ptr_out = buf1;
 	size_in1 = size;
@@ -153,6 +139,7 @@
 	ret1 = smb_iconv(cd2, &ptr_in, &size_in1, &ptr_out, &outsize1);
 	errno1 = errno;
 
+	/* system convert to charset - placing result in buf2 */
 	ptr_in = inbuf;
 	ptr_out = buf2;
 	size_in2 = size;
@@ -221,7 +208,8 @@
 
 		ok = 0;
 	}
-	
+
+	/* convert back to UTF-16, putting result in buf3 */
 	size = size - size_in1;
 	ptr_in = buf1;
 	ptr_out = buf3;
@@ -230,12 +218,26 @@
 
 	memset(ptr_out, 0, outsize3);
 	ret3 = smb_iconv(cd3, &ptr_in, &size_in3, &ptr_out, &outsize3);
-	
+
+	/* we only internally support the first 1M codepoints */
+	if (outsize3 != sizeof(buf3) - size &&
+	    get_codepoint(inbuf+sizeof(buf3) - outsize3, 
+			  size - (sizeof(buf3) - outsize3),
+			  "UTF-16LE") >= (1<<20)) {
+		return ok;
+	}
+
 	if (ret3 != 0) {
 		printf("pull failed - %s\n", strerror(errno));
 		ok = 0;
 	}
-	
+
+	if (strncmp(charset, "UTF", 3) != 0) {
+		/* don't expect perfect mappings for non UTF charsets */
+		return ok;
+	}
+
+
 	if (outsize3 != sizeof(buf3) - size) {
 		printf("wrong outsize3 - %d should be %d\n", 
 		       outsize3, sizeof(buf3) - size);
@@ -245,8 +247,12 @@
 	if (memcmp(buf3, inbuf, size) != 0) {
 		printf("pull bytes mismatch:\n");
 		show_buf("inbuf", inbuf, size);
-		show_buf(" buf3", buf3, size);
+		show_buf(" buf3", buf3, sizeof(buf3) - outsize3);
 		ok = 0;
+		printf("next codepoint is %u\n", 
+		       get_codepoint(inbuf+sizeof(buf3) - outsize3, 
+				     size - (sizeof(buf3) - outsize3),
+				     "UTF-16LE"));
 	}
 
 	if (!ok) {



More information about the samba-cvs mailing list