Tcl Source Code

Artifact [66015315bf]
Login

Artifact 66015315bfb135c525a3604535e86e5fdc5ed1e2:

Attachment "None" to ticket [402470ffff] added by andreas_kupries 2000-11-22 15:10:01.
*** ./generic/tclEncoding.c.orig	Tue Nov 21 21:35:56 2000
--- ./generic/tclEncoding.c	Tue Nov 21 22:00:01 2000
***************
*** 1328,1340 ****
      TableEncodingData *dataPtr;
      unsigned short *pageMemPtr;
      Tcl_EncodingType encType;
-     char *hex;
      static char staticHex[] = {
  	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0,
  	10, 11, 12, 13, 14, 15
      };
  
!     hex = staticHex - '0';
  
      Tcl_DStringInit(&lineString);
      Tcl_Gets(chan, &lineString);
--- 1328,1340 ----
      TableEncodingData *dataPtr;
      unsigned short *pageMemPtr;
      Tcl_EncodingType encType;
      static char staticHex[] = {
  	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0,
  	10, 11, 12, 13, 14, 15
      };
  
! #define IN_RANGE(min,x,max) (((min) <= (x)) && ((x) <= (max)))
! #define HEX(ch)             (IN_RANGE ('0',ch,'9') || IN_RANGE ('A',ch,'F'))
  
      Tcl_DStringInit(&lineString);
      Tcl_Gets(chan, &lineString);
***************
*** 1383,1397 ****
  
  	Tcl_ReadChars(chan, objPtr, 3 + 16 * (16 * 4 + 1), 0);
  	p = Tcl_GetString(objPtr);
! 	hi = (hex[(int)p[0]] << 4) + hex[(int)p[1]];
  	dataPtr->toUnicode[hi] = pageMemPtr;
  	p += 2;
  	for (lo = 0; lo < 256; lo++) {
  	    if ((lo & 0x0f) == 0) {
  		p++;
  	    }
! 	    ch = (hex[(int)p[0]] << 12) + (hex[(int)p[1]] << 8)
! 		+ (hex[(int)p[2]] << 4) + hex[(int)p[3]];
  	    if (ch != 0) {
  		used[ch >> 8] = 1;
  	    }
--- 1383,1411 ----
  
  	Tcl_ReadChars(chan, objPtr, 3 + 16 * (16 * 4 + 1), 0);
  	p = Tcl_GetString(objPtr);
! 
! 	if (! (HEX (p[0]) && HEX (p[1]))) {
! 	  ckfree ((char*) dataPtr->toUnicode);
! 	  ckfree ((char*) dataPtr);
! 	  return NULL;
! 	}
! 
! 	hi = (staticHex[(int)(p[0]-'0')] << 4) + staticHex[(int)(p[1]-'0')];
  	dataPtr->toUnicode[hi] = pageMemPtr;
  	p += 2;
  	for (lo = 0; lo < 256; lo++) {
  	    if ((lo & 0x0f) == 0) {
  		p++;
  	    }
! 
! 	    if (! (HEX (p[0]) && HEX (p[1]) && HEX (p[2]) && HEX (p[3]))) {
! 	      ckfree ((char*) dataPtr->toUnicode);
! 	      ckfree ((char*) dataPtr);
! 	      return NULL;
! 	    }
! 
! 	    ch = (staticHex[(int)(p[0]-'0')] << 12) + (staticHex[(int)(p[1]-'0')] << 8)
! 		+ (staticHex[(int)(p[2]-'0')] << 4) + staticHex[(int)(p[3]-'0')];
  	    if (ch != 0) {
  		used[ch >> 8] = 1;
  	    }
***************
*** 1511,1516 ****
--- 1525,1532 ----
      encType.clientData	    = (ClientData) dataPtr;
      return Tcl_CreateEncoding(&encType);
  
+ #undef IN_RANGE
+ #undef HEX
  }
  
  /*