Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite576f71

Browse files
author
Michael Meskes
committed
Fix ecpg crash with bytea and cursor variables.
Author: Jehan-Guillaume de Rorthais <jgdr@dalibo.com>
1 parentaa90d99 commite576f71

File tree

5 files changed

+201
-88
lines changed

5 files changed

+201
-88
lines changed

‎src/interfaces/ecpg/preproc/ecpg.header

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,8 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
289289
else if ((ptr->variable->type->type != ECPGt_varchar
290290
&& ptr->variable->type->type != ECPGt_char
291291
&& ptr->variable->type->type != ECPGt_unsigned_char
292-
&& ptr->variable->type->type != ECPGt_string)
292+
&& ptr->variable->type->type != ECPGt_string
293+
&& ptr->variable->type->type != ECPGt_bytea)
293294
&& atoi(ptr->variable->type->size) > 1)
294295
{
295296
newvar = new_variable(cat_str(4, mm_strdup("("),
@@ -305,7 +306,8 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
305306
else if ((ptr->variable->type->type == ECPGt_varchar
306307
|| ptr->variable->type->type == ECPGt_char
307308
|| ptr->variable->type->type == ECPGt_unsigned_char
308-
|| ptr->variable->type->type == ECPGt_string)
309+
|| ptr->variable->type->type == ECPGt_string
310+
|| ptr->variable->type->type == ECPGt_bytea)
309311
&& atoi(ptr->variable->type->size) > 1)
310312
{
311313
newvar = new_variable(cat_str(4, mm_strdup("("),
@@ -316,7 +318,8 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
316318
ptr->variable->type->size,
317319
ptr->variable->type->counter),
318320
0);
319-
if (ptr->variable->type->type == ECPGt_varchar)
321+
if (ptr->variable->type->type == ECPGt_varchar ||
322+
ptr->variable->type->type == ECPGt_bytea)
320323
var_ptr = true;
321324
}
322325
else if (ptr->variable->type->type == ECPGt_struct

‎src/interfaces/ecpg/test/expected/sql-bytea.c

Lines changed: 99 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ main(void)
5151

5252

5353
#line 27 "bytea.pgc"
54-
structbytea_1 {intlen;chararr[DATA_SIZE ]; }send_buf [2 ] ;
54+
structbytea_1 {intlen;chararr[512 ]; }send_buf [2 ] ;
5555

5656
#line 28 "bytea.pgc"
5757
structbytea_2 {intlen;chararr[DATA_SIZE ]; }recv_buf [2 ] ;
@@ -139,9 +139,9 @@ if (sqlca.sqlcode < 0) sqlprint();}
139139
#line 68 "bytea.pgc"
140140

141141
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"insert into test values ( $1 , $2 )",
142-
ECPGt_bytea,&(send_buf[0]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),
142+
ECPGt_bytea,&(send_buf[0]),(long)512,(long)1,sizeof(structbytea_1),
143143
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,
144-
ECPGt_bytea,&(send_buf[1]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),
144+
ECPGt_bytea,&(send_buf[1]),(long)512,(long)1,sizeof(structbytea_1),
145145
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EOIT,ECPGt_EORT);
146146
#line 69 "bytea.pgc"
147147

@@ -161,7 +161,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
161161
dump_binary(recv_buf[0].arr,recv_buf[0].len,ind[0]);
162162
dump_binary(recv_short_buf.arr,recv_short_buf.len,ind[1]);
163163

164-
/* Test forvariable length array */
164+
/* Test forcursor */
165165
init();
166166
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"truncate test",ECPGt_EOIT,ECPGt_EORT);
167167
#line 76 "bytea.pgc"
@@ -170,32 +170,89 @@ if (sqlca.sqlcode < 0) sqlprint();}
170170
#line 76 "bytea.pgc"
171171

172172
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"insert into test values ( $1 , $2 )",
173-
ECPGt_bytea,&(send_buf[0]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),
173+
ECPGt_bytea,&(send_buf[0]),(long)512,(long)1,sizeof(structbytea_1),
174174
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,
175-
ECPGt_bytea,&(send_buf[1]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),
175+
ECPGt_bytea,&(send_buf[1]),(long)512,(long)1,sizeof(structbytea_1),
176176
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EOIT,ECPGt_EORT);
177177
#line 77 "bytea.pgc"
178178

179179
if (sqlca.sqlcode<0)sqlprint();}
180180
#line 77 "bytea.pgc"
181181

182+
ECPGset_var(0,&(send_buf[0] ),__LINE__);\
183+
/* declare cursor1 cursor for select data1 from test where data1 = $1 */
184+
#line 78 "bytea.pgc"
185+
186+
if (sqlca.sqlcode<0)sqlprint();
187+
#line 78 "bytea.pgc"
188+
189+
#line 78 "bytea.pgc"
190+
191+
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"declare cursor1 cursor for select data1 from test where data1 = $1 ",
192+
ECPGt_bytea,&(send_buf[0]),(long)512,(long)1,sizeof(structbytea_1),
193+
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EOIT,ECPGt_EORT);
194+
#line 79 "bytea.pgc"
195+
196+
if (sqlca.sqlcode<0)sqlprint();}
197+
#line 79 "bytea.pgc"
198+
199+
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"fetch from cursor1",ECPGt_EOIT,
200+
ECPGt_bytea,&(recv_buf[0]),(long)DATA_SIZE,(long)1,sizeof(structbytea_2),
201+
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EORT);
202+
#line 80 "bytea.pgc"
203+
204+
if (sqlca.sqlcode<0)sqlprint();}
205+
#line 80 "bytea.pgc"
206+
207+
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"close cursor1",ECPGt_EOIT,ECPGt_EORT);
208+
#line 81 "bytea.pgc"
209+
210+
if (sqlca.sqlcode<0)sqlprint();}
211+
#line 81 "bytea.pgc"
212+
213+
{ECPGdeallocate(__LINE__,0,NULL,"cursor1");
214+
#line 82 "bytea.pgc"
215+
216+
if (sqlca.sqlcode<0)sqlprint();}
217+
#line 82 "bytea.pgc"
218+
219+
dump_binary(recv_buf[0].arr,recv_buf[0].len,0);
220+
221+
/* Test for variable length array */
222+
init();
223+
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"truncate test",ECPGt_EOIT,ECPGt_EORT);
224+
#line 87 "bytea.pgc"
225+
226+
if (sqlca.sqlcode<0)sqlprint();}
227+
#line 87 "bytea.pgc"
228+
182229
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"insert into test values ( $1 , $2 )",
183-
ECPGt_bytea,&(send_buf[0]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),
230+
ECPGt_bytea,&(send_buf[0]),(long)512,(long)1,sizeof(structbytea_1),
184231
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,
185-
ECPGt_bytea,&(send_buf[1]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),
232+
ECPGt_bytea,&(send_buf[1]),(long)512,(long)1,sizeof(structbytea_1),
186233
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EOIT,ECPGt_EORT);
187-
#line78 "bytea.pgc"
234+
#line88 "bytea.pgc"
188235

189236
if (sqlca.sqlcode<0)sqlprint();}
190-
#line 78 "bytea.pgc"
237+
#line 88 "bytea.pgc"
238+
239+
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"insert into test values ( $1 , $2 )",
240+
ECPGt_bytea,&(send_buf[0]),(long)512,(long)1,sizeof(structbytea_1),
241+
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,
242+
ECPGt_bytea,&(send_buf[1]),(long)512,(long)1,sizeof(structbytea_1),
243+
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EOIT,ECPGt_EORT);
244+
#line 89 "bytea.pgc"
245+
246+
if (sqlca.sqlcode<0)sqlprint();}
247+
#line 89 "bytea.pgc"
191248

192249
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"select data1 from test",ECPGt_EOIT,
193250
ECPGt_bytea,&(recv_vlen_buf),(long)DATA_SIZE,(long)0,sizeof(structbytea_3),
194251
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EORT);
195-
#line79 "bytea.pgc"
252+
#line90 "bytea.pgc"
196253

197254
if (sqlca.sqlcode<0)sqlprint();}
198-
#line79 "bytea.pgc"
255+
#line90 "bytea.pgc"
199256

200257
dump_binary(recv_vlen_buf[0].arr,recv_vlen_buf[0].len,0);
201258
dump_binary(recv_vlen_buf[1].arr,recv_vlen_buf[1].len,0);
@@ -204,112 +261,112 @@ if (sqlca.sqlcode < 0) sqlprint();}
204261
/* Test for dynamic sql statement with normal host variable, indicator */
205262
init();
206263
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"truncate test",ECPGt_EOIT,ECPGt_EORT);
207-
#line86 "bytea.pgc"
264+
#line97 "bytea.pgc"
208265

209266
if (sqlca.sqlcode<0)sqlprint();}
210-
#line86 "bytea.pgc"
267+
#line97 "bytea.pgc"
211268

212269
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_execute,"ins_stmt",
213-
ECPGt_bytea,&(send_buf[0]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),
270+
ECPGt_bytea,&(send_buf[0]),(long)512,(long)1,sizeof(structbytea_1),
214271
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,
215-
ECPGt_bytea,&(send_buf[1]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),
272+
ECPGt_bytea,&(send_buf[1]),(long)512,(long)1,sizeof(structbytea_1),
216273
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EOIT,ECPGt_EORT);
217-
#line87 "bytea.pgc"
274+
#line98 "bytea.pgc"
218275

219276
if (sqlca.sqlcode<0)sqlprint();}
220-
#line87 "bytea.pgc"
277+
#line98 "bytea.pgc"
221278

222279
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_execute,"sel_stmt",ECPGt_EOIT,
223280
ECPGt_bytea,&(recv_buf[0]),(long)DATA_SIZE,(long)1,sizeof(structbytea_2),
224281
ECPGt_int,&(ind[0]),(long)1,(long)1,sizeof(int),
225282
ECPGt_bytea,&(recv_short_buf),(long)DATA_SIZE-LACK_SIZE,(long)1,sizeof(structbytea_4),
226283
ECPGt_int,&(ind[1]),(long)1,(long)1,sizeof(int),ECPGt_EORT);
227-
#line88 "bytea.pgc"
284+
#line99 "bytea.pgc"
228285

229286
if (sqlca.sqlcode<0)sqlprint();}
230-
#line88 "bytea.pgc"
287+
#line99 "bytea.pgc"
231288

232289
dump_binary(recv_buf[0].arr,recv_buf[0].len,ind[0]);
233290
dump_binary(recv_short_buf.arr,recv_short_buf.len,ind[1]);
234291

235292
/* Test for dynamic sql statement with sql descriptor */
236293
init();
237294
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"truncate test",ECPGt_EOIT,ECPGt_EORT);
238-
#line94 "bytea.pgc"
295+
#line105 "bytea.pgc"
239296

240297
if (sqlca.sqlcode<0)sqlprint();}
241-
#line94 "bytea.pgc"
298+
#line105 "bytea.pgc"
242299

243300
{ECPGset_desc(__LINE__,"idesc",1,ECPGd_data,
244-
ECPGt_bytea,&(send_buf[0]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),ECPGd_EODT);
301+
ECPGt_bytea,&(send_buf[0]),(long)512,(long)1,sizeof(structbytea_1),ECPGd_EODT);
245302

246-
#line95 "bytea.pgc"
303+
#line106 "bytea.pgc"
247304

248305
if (sqlca.sqlcode<0)sqlprint();}
249-
#line95 "bytea.pgc"
306+
#line106 "bytea.pgc"
250307

251308
{ECPGset_desc(__LINE__,"idesc",2,ECPGd_data,
252-
ECPGt_bytea,&(send_buf[1]),(long)DATA_SIZE,(long)1,sizeof(structbytea_1),ECPGd_EODT);
309+
ECPGt_bytea,&(send_buf[1]),(long)512,(long)1,sizeof(structbytea_1),ECPGd_EODT);
253310

254-
#line96 "bytea.pgc"
311+
#line107 "bytea.pgc"
255312

256313
if (sqlca.sqlcode<0)sqlprint();}
257-
#line96 "bytea.pgc"
314+
#line107 "bytea.pgc"
258315

259316
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_execute,"ins_stmt",
260317
ECPGt_descriptor,"idesc",1L,1L,1L,
261318
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EOIT,ECPGt_EORT);
262-
#line97 "bytea.pgc"
319+
#line108 "bytea.pgc"
263320

264321
if (sqlca.sqlcode<0)sqlprint();}
265-
#line97 "bytea.pgc"
322+
#line108 "bytea.pgc"
266323

267324
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_execute,"sel_stmt",ECPGt_EOIT,
268325
ECPGt_descriptor,"odesc",1L,1L,1L,
269326
ECPGt_NO_INDICATOR,NULL ,0L,0L,0L,ECPGt_EORT);
270-
#line98 "bytea.pgc"
327+
#line109 "bytea.pgc"
271328

272329
if (sqlca.sqlcode<0)sqlprint();}
273-
#line98 "bytea.pgc"
330+
#line109 "bytea.pgc"
274331

275332
{ECPGget_desc(__LINE__,"odesc",1,ECPGd_indicator,
276333
ECPGt_int,&(ind[0]),(long)1,(long)1,sizeof(int),ECPGd_data,
277334
ECPGt_bytea,&(recv_buf[0]),(long)DATA_SIZE,(long)1,sizeof(structbytea_2),ECPGd_EODT);
278335

279-
#line99 "bytea.pgc"
336+
#line110 "bytea.pgc"
280337

281338
if (sqlca.sqlcode<0)sqlprint();}
282-
#line99 "bytea.pgc"
339+
#line110 "bytea.pgc"
283340

284341
{ECPGget_desc(__LINE__,"odesc",2,ECPGd_indicator,
285342
ECPGt_int,&(ind[1]),(long)1,(long)1,sizeof(int),ECPGd_data,
286343
ECPGt_bytea,&(recv_short_buf),(long)DATA_SIZE-LACK_SIZE,(long)1,sizeof(structbytea_4),ECPGd_EODT);
287344

288-
#line100 "bytea.pgc"
345+
#line111 "bytea.pgc"
289346

290347
if (sqlca.sqlcode<0)sqlprint();}
291-
#line100 "bytea.pgc"
348+
#line111 "bytea.pgc"
292349

293350
dump_binary(recv_buf[0].arr,recv_buf[0].len,ind[0]);
294351
dump_binary(recv_short_buf.arr,recv_short_buf.len,ind[1]);
295352

296353
{ECPGdo(__LINE__,0,1,NULL,0,ECPGst_normal,"drop table test",ECPGt_EOIT,ECPGt_EORT);
297-
#line104 "bytea.pgc"
354+
#line115 "bytea.pgc"
298355

299356
if (sqlca.sqlcode<0)sqlprint();}
300-
#line104 "bytea.pgc"
357+
#line115 "bytea.pgc"
301358

302359
{ECPGtrans(__LINE__,NULL,"commit");
303-
#line105 "bytea.pgc"
360+
#line116 "bytea.pgc"
304361

305362
if (sqlca.sqlcode<0)sqlprint();}
306-
#line105 "bytea.pgc"
363+
#line116 "bytea.pgc"
307364

308365
{ECPGdisconnect(__LINE__,"CURRENT");
309-
#line106 "bytea.pgc"
366+
#line117 "bytea.pgc"
310367

311368
if (sqlca.sqlcode<0)sqlprint();}
312-
#line106 "bytea.pgc"
369+
#line117 "bytea.pgc"
313370

314371

315372
return0;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp