|
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 |