[Date Prev][Date Next] [Chronological] [Thread] [Top]

ITS#2490 patch



> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.
> Some parts of this will be readable as plain text.
> To see the rest, you will need to upgrade your mail reader.

--PART.BOUNDARY.1000.17399.mandolin.1053425528.1
Content-ID: <1000_17399_1053425528_2@mandolin>
Content-type: text/plain

Amazing how a simple 2K of plaintext diffs gets turned into a 5K binary
attachment. Stupid MS mail clients. Hopefully this message is more usable.


--PART.BOUNDARY.1000.17399.mandolin.1053425528.1
Content-ID: <1000_17399_1053425528_3@mandolin>
Content-type: text/plain 

Index: io.c
===================================================================
RCS file: /repo/OpenLDAP/pkg/ldap/libraries/liblber/io.c,v
retrieving revision 1.70.2.10
diff -u -r1.70.2.10 io.c
--- io.c	26 Apr 2003 14:56:37 -0000	1.70.2.10
+++ io.c	20 May 2003 09:22:46 -0000
@@ -515,6 +515,7 @@
 		char buf[sizeof(ber->ber_len)-1];
 		ber_len_t tlen = 0;
 
+		errno = 0;
 		sblen=ber_int_sb_read( sb, ber->ber_rwptr,
 			((char *)&ber->ber_len + LENSIZE*2 - 1)-ber->ber_rwptr);
 		if (sblen<=0) return LBER_DEFAULT;
@@ -540,34 +541,44 @@
 				}
 				/* Did we run out of bytes? */
 				if ((char *)p == ber->ber_rwptr) {
+#if defined( EWOULDBLOCK )
+					errno = EWOULDBLOCK;
+#elif defined( EAGAIN )
+					errno = EAGAIN;
+#endif			
 					return LBER_DEFAULT;
 				}
 			}
+			if (sblen == 1) continue;
+
 			ber->ber_tag = tag;
 			ber->ber_ptr = (char *)p;
-
-			if (sblen == 1) continue;
 		}
 
 		/* Now look for the length */
 		if (*ber->ber_ptr & 0x80) {	/* multi-byte */
 			ber_len_t i;
-			int llen = *(unsigned char *)ber->ber_ptr++ & 0x7f;
+			unsigned char *p = (unsigned char *)ber->ber_ptr;
+			int llen = *p++ & 0x7f;
 			if (llen > (int)sizeof(ber_len_t)) {
 				errno = ERANGE;
 				return LBER_DEFAULT;
 			}
 			/* Not enough bytes? */
-			if (ber->ber_rwptr - ber->ber_ptr < llen) {
+			if (ber->ber_rwptr - (char *)p < llen) {
+#if defined( EWOULDBLOCK )
+				errno = EWOULDBLOCK;
+#elif defined( EAGAIN )
+				errno = EAGAIN;
+#endif			
 				return LBER_DEFAULT;
 			}
-			for (i=0;
-				i<llen && ber->ber_ptr<ber->ber_rwptr;
-				i++,ber->ber_ptr++)
+			for (i=0; i<llen; i++)
 			{
 				tlen <<=8;
-				tlen |= *(unsigned char *)ber->ber_ptr;
+				tlen |= *p++;
 			}
+			ber->ber_ptr = p;
 		} else {
 			tlen = *(unsigned char *)ber->ber_ptr++;
 		}
@@ -645,6 +656,7 @@
 		to_go = ber->ber_end - ber->ber_rwptr;
 		assert( to_go > 0 );
 		
+		errno = 0;
 		res = ber_int_sb_read( sb, ber->ber_rwptr, to_go );
 		if (res<=0) return LBER_DEFAULT;
 		ber->ber_rwptr+=res;

--PART.BOUNDARY.1000.17399.mandolin.1053425528.1--