components/coolkey/patches/12-cky_base.c.patch
branchs11u3-sru
changeset 6535 8f23248b161c
equal deleted inserted replaced
6529:50a81baffe58 6535:8f23248b161c
       
     1 Upstream fixes already included in the latest community updates to coolkey v1.1.0
       
     2 
       
     3 Addresses various buffer management issues in the coolkey library.
       
     4 
       
     5 --- ORIGINAL/./src/libckyapplet/cky_base.c	2016-06-24 16:08:04.062060228 -0400
       
     6 +++ ././src/libckyapplet/cky_base.c	2016-06-24 12:46:18.558329391 -0400
       
     7 @@ -41,6 +41,7 @@
       
     8      buf->data = NULL;
       
     9      buf->size = 0;
       
    10      buf->len = 0;
       
    11 +    buf->reserved = NULL; /* make coverity happy */
       
    12  } 
       
    13  
       
    14  /*
       
    15 @@ -220,6 +221,22 @@
       
    16      return CKYSUCCESS;
       
    17  }
       
    18  
       
    19 +/* append a short in network order */
       
    20 +CKYStatus
       
    21 +CKYBuffer_AppendShortLE(CKYBuffer *buf, unsigned short val)
       
    22 +{
       
    23 +    CKYStatus ret;
       
    24 +
       
    25 +    ret = CKYBuffer_Reserve(buf, buf->len + 2);
       
    26 +    if (ret != CKYSUCCESS) {
       
    27 +	return ret;
       
    28 +    }
       
    29 +    buf->data[buf->len+1] = (CKYByte) ((val >> 8) & 0xff);
       
    30 +    buf->data[buf->len+0] = (CKYByte) ((val >> 0) & 0xff);
       
    31 +    buf->len += 2;
       
    32 +    return CKYSUCCESS;
       
    33 +}
       
    34 +
       
    35  /* append a long in applet order */
       
    36  CKYStatus
       
    37  CKYBuffer_AppendLong(CKYBuffer *buf, unsigned long val)
       
    38 @@ -238,6 +255,24 @@
       
    39      return CKYSUCCESS;
       
    40  }
       
    41  
       
    42 +/* append a long in applet order */
       
    43 +CKYStatus
       
    44 +CKYBuffer_AppendLongLE(CKYBuffer *buf, unsigned long val)
       
    45 +{
       
    46 +    CKYStatus ret;
       
    47 +
       
    48 +    ret = CKYBuffer_Reserve(buf, buf->len + 4);
       
    49 +    if (ret != CKYSUCCESS) {
       
    50 +	return ret;
       
    51 +    }
       
    52 +    buf->data[buf->len+3] = (CKYByte) ((val >> 24) & 0xff);
       
    53 +    buf->data[buf->len+2] = (CKYByte) ((val >> 16) & 0xff);
       
    54 +    buf->data[buf->len+1] = (CKYByte) ((val >>  8) & 0xff);
       
    55 +    buf->data[buf->len+0] = (CKYByte) ((val >>  0) & 0xff);
       
    56 +    buf->len += 4;
       
    57 +    return CKYSUCCESS;
       
    58 +}
       
    59 +
       
    60  CKYStatus
       
    61  CKYBuffer_Replace(CKYBuffer *buf, CKYOffset offset, const CKYByte *data, CKYSize len)
       
    62  {
       
    63 @@ -351,6 +386,22 @@
       
    64  }
       
    65  
       
    66  CKYStatus
       
    67 +CKYBuffer_SetShortLE(CKYBuffer *buf, CKYOffset offset, unsigned short val)
       
    68 +{
       
    69 +    CKYStatus ret;
       
    70 +
       
    71 +    if (buf->len < offset+2) {
       
    72 +	ret = CKYBuffer_Resize(buf,offset+2);
       
    73 +	if (ret != CKYSUCCESS) {
       
    74 +	    return ret;
       
    75 +	}
       
    76 +    }
       
    77 +    buf->data[offset+1] = (CKYByte) ((val >> 8) & 0xff);
       
    78 +    buf->data[offset+0] = (CKYByte) ((val >> 0) & 0xff);
       
    79 +    return CKYSUCCESS;
       
    80 +}
       
    81 +
       
    82 +CKYStatus
       
    83  CKYBuffer_SetLong(CKYBuffer *buf, CKYOffset offset, unsigned long val)
       
    84  {
       
    85      CKYStatus ret;
       
    86 @@ -368,6 +419,24 @@
       
    87      return CKYSUCCESS;
       
    88  }
       
    89  
       
    90 +CKYStatus
       
    91 +CKYBuffer_SetLongLE(CKYBuffer *buf, CKYOffset offset, unsigned long val)
       
    92 +{
       
    93 +    CKYStatus ret;
       
    94 +
       
    95 +    if (buf->len < offset+4) {
       
    96 +	ret = CKYBuffer_Resize(buf,offset+4);
       
    97 +	if (ret != CKYSUCCESS) {
       
    98 +	    return ret;
       
    99 +	}
       
   100 +    }
       
   101 +    buf->data[offset+3] = (CKYByte) ((val >> 24) & 0xff);
       
   102 +    buf->data[offset+2] = (CKYByte) ((val >> 16) & 0xff);
       
   103 +    buf->data[offset+1] = (CKYByte) ((val >>  8) & 0xff);
       
   104 +    buf->data[offset+0] = (CKYByte) ((val >>  0) & 0xff);
       
   105 +    return CKYSUCCESS;
       
   106 +}
       
   107 +
       
   108  CKYByte
       
   109  CKYBuffer_GetChar(const CKYBuffer *buf, CKYOffset offset)
       
   110  {
       
   111 @@ -388,6 +457,18 @@
       
   112      val |= ((unsigned short)buf->data[offset+1]) << 0;
       
   113      return val;
       
   114  }
       
   115 +
       
   116 +unsigned short
       
   117 +CKYBuffer_GetShortLE(const CKYBuffer *buf, CKYOffset offset)
       
   118 +{
       
   119 +    unsigned short val;
       
   120 +    if (buf->len < offset+2) {
       
   121 +	return 0;
       
   122 +    }
       
   123 +    val  = ((unsigned short)buf->data[offset+1]) << 8;
       
   124 +    val |= ((unsigned short)buf->data[offset+0]) << 0;
       
   125 +    return val;
       
   126 +}
       
   127  	
       
   128  unsigned long
       
   129  CKYBuffer_GetLong(const CKYBuffer *buf, CKYOffset offset)
       
   130 @@ -402,6 +483,20 @@
       
   131      val |= ((unsigned long)buf->data[offset+3]) << 0;
       
   132      return val;
       
   133  }
       
   134 +
       
   135 +unsigned long
       
   136 +CKYBuffer_GetLongLE(const CKYBuffer *buf, CKYOffset offset)
       
   137 +{
       
   138 +    unsigned long val;
       
   139 +    if (buf->len < offset+4) {
       
   140 +	return 0;
       
   141 +    }
       
   142 +    val  = ((unsigned long)buf->data[offset+3]) << 24;
       
   143 +    val |= ((unsigned long)buf->data[offset+2]) << 16;
       
   144 +    val |= ((unsigned long)buf->data[offset+1]) << 8;
       
   145 +    val |= ((unsigned long)buf->data[offset+0]) << 0;
       
   146 +    return val;
       
   147 +}
       
   148  	
       
   149  CKYStatus
       
   150  CKYBuffer_Resize(CKYBuffer *buf, CKYSize newLen)
       
   151 @@ -479,6 +574,7 @@
       
   152      assert(sizeof(CKYAPDU) == sizeof(CKYAPDUPublic));
       
   153  #endif
       
   154     ckyBuffer_initBuffer(&apdu->apduBuf);
       
   155 +   apdu->reserved = NULL;
       
   156     return CKYBuffer_Resize(&apdu->apduBuf, CKYAPDU_MIN_LEN);
       
   157  }
       
   158  
       
   159 @@ -489,6 +585,7 @@
       
   160      assert(sizeof(CKYAPDU) == sizeof(CKYAPDUPublic));
       
   161  #endif
       
   162      ckyBuffer_initBuffer(&apdu->apduBuf);
       
   163 +    apdu->reserved = NULL;
       
   164      if (len > CKYAPDU_MAX_DATA_LEN) {
       
   165  	return CKYDATATOOLONG;
       
   166      }
       
   167 @@ -616,8 +713,15 @@
       
   168      return CKYBuffer_SetChar(&apdu->apduBuf, CKY_LE_OFFSET, recvlen);
       
   169  }
       
   170  
       
   171 +CKYStatus
       
   172 +CKYAPDU_AppendReceiveLen(CKYAPDU *apdu, CKYByte recvlen)
       
   173 +{
       
   174 +    return CKYBuffer_AppendChar(&apdu->apduBuf, recvlen);
       
   175 +}
       
   176 +
       
   177 +
       
   178  void
       
   179 -CKY_SetName(char *p)
       
   180 +CKY_SetName(const char *p)
       
   181  {
       
   182  }
       
   183