Hi!

Request For Comments for bugfixes made to ext/interbase/ibase_query.c.
I'm working on the PHP_5_3 branch.

I've been working on bugfixes for the following bugreports:

#30690, InterBase: Resource handle from ibase_execute becomes invalid after 
return
#32143, ibase_query() causes IB server crash with invalid DB and parameters
#39397, invalid statement handle in Unknown on line 0
#39700, NUMERIC error when result precision are 7,8 or 12-14


#32143 is solved by checking for an empty querystring - if that's the case, 
an error is returned, and no attempt to prepare a query is made.

#39700 is also quite easy to solve (solutions presented in comment section 
of bugreport)

#30690 and #39397 are somewhat related as they both address problems with 
destruction of query and result resources.
My bugfix for this is based on the fact, that there is a one-to-one 
relationship between a query resource and a result resource.
Both resources share a common statement handle to the Interbase/Firebird 
API, and the idea behind the solution is to only drop this statement handle, 
when neither the query resource nor the result resource need it.
I have therefore bound the two resources together with a pointer in each 
structure pointing at each other.
These pointers are assigned a value when a result resource is created.
Upon destruction of either, the pointer in the opposite structure is 
NULL'ed, indicating that this resource no longer exists.
When the last of the two resources is destroyed, the pointer to the other 
resource is NULL, and then it is time to drop the statement handle in the 
API.
In addition, before the statement handle is dropped, it is checked, that the 
database link is still valid (to prevent a Warning when destroying a query 
resource after the database link is closed).

I have attached a unified diff for the changes made.

I would appreciate any comments to the solutions chosen/made.

Best regards
Lars W


begin 666 ibase_query_c-diff-u.txt
M9&EF9B M=2 M<C$N,C,N,BXQ+C(N,3 @:6)A<V5?<75E<GDN8PHM+2T@:6)A
M<V5?<75E<GDN8PDW($IU;B R,# W(# X.C4Y.C P("TP,# P"3$N,C,N,BXQ
M+C(N,3 **RLK(&EB87-E7W%U97)Y+F,),2!.;W8@,C P-R R,CHP,#HT-R M
M,# P, I 0" M-#DL-B K-#DL-R! 0 [EMAIL PROTECTED]'EP961E9B!S=')U8W0@>PH@"6EB
M87-E7V1B7VQI;[EMAIL PROTECTED];FL["B ):6)A<V5?=')A;G,@*G1R86YS.PHK"7-T
M<G5C="!?:6)?<75E<[EMAIL PROTECTED])Y.PH@"6ES8U]S=&UT7VAA;F1L92!S=&UT
M.PH@"75N<VEG;F5D('-H;W)T('1Y<&4["B )=6YS:[EMAIL PROTECTED]<B!H87-?
M;6]R95]R;W=S+"!S=&%T96UE;G1?='EP93L*0$ @[EMAIL PROTECTED]($! 
M"B ):6)A<V5?87)R87D@;W5T7V%R<F%Y6S%=.R O*B!L87-T(&UE;6)E<B J
[EMAIL PROTECTED];'0["B *+71Y<&5D968@<W1R=6-T('L**W1Y<&5D
M968@<W1R=6-T(%]I8E]Q=65R>2!["B ):6)A<V5?9&)?;&EN:R J;&EN:SL*
M( EI8F%S95]T<F%N<R J=')A;G,["BL):6)A<V5?<F5S=6QT("IR97-U;'0[
M"B ):6YT(')E<W5L=%]R97-?:60["B ):7-C7W-T;71?:&%N9&QE('-T;70[
M"B )6%-13$1!("II;E]S<[EMAIL PROTECTED]<6QD83L*0$ @+3$Q-BPV("LQ
M,[EMAIL PROTECTED],C(@0$ *('T*("\J('U]?2 J+PH@"BMS=&%T:6,@=F]I9"!?<&AP7VEB
M87-E7V9R965?<W1M=%]H86YD;&4H:6)A<V5?9&)?;&EN:R J;&EN:RP@:7-C
M7W-T;71?:&%N9&QE('-T;[EMAIL PROTECTED] O*B![>[EMAIL PROTECTED]
M9B H<W1M="D@>PHK"0E)0D1%0E5'*")$<F]P<&EN9R!S=&%T96UE;G0@:&%N
M9&QE("AF<F5E7W-T;71?:&%N9&QE*2XN+B(I.PHK"0DO*B!/;FQY(&9R964@
M<W1A=&5M96YT(&EF(&1B+6-O;FYE8W1I;VX@:7,@<W1I;&P@;W!E;B J+PHK
M"0EC:&%R(&1B7VET96US6UT@/2![:7-C7VEN9F]?<&%G95]S:7IE?2P@<F5S
M7V)U9ELT,%T["BL)"6EF("A354-#15-3(#T](&ES8U]D871A8F%S95]I;F9O
M*$E"7U-405154RP@)FQI;FLM/FAA;F1L92P@"BL)"0D)"0D)<VEZ96]F*&1B
[EMAIL PROTECTED]&)?:71E;7,L('-I>F5O9BAR97-?8G5F*2P@<F5S7V)U9BDI
M('L**PD)"6EF("AI<V-?9'-Q;%]F<F5E7W-T871E;65N="A)0E]35$%455,L
M("9S=&UT+"!$4U%,7V1R;W I*2!["BL)"0D)7W!H<%]I8F%S95]E<G)O<BA4
M4U)-3%-?0RD["BL)"0E]"BL)"7T**PE]"BM]"[EMAIL PROTECTED]@<W1A
M=&EC('9O:[EMAIL PROTECTED]<%]I8F%S95]F<F5E7W)E<W5L="AZ96YD7W)S<F-?;&ES
M=%]E;G1R>2 J<G-R8R!44U)-3%-?1$,I("\J('M[>R J+PH@>PH@"6EB87-E
M7W)E<W5L=" J:6)?<F5S=6QT([EMAIL PROTECTED]&EB87-E7W)E<W5L=" J*2!R<W)C+3YP
M='(["D! ("TQ,C,L.2 K,30Q+#$Q($! "B )24)$14)[EMAIL PROTECTED])E96EN9R!R
M97-U;'[EMAIL PROTECTED]@9'1O<BXN+B(I.PH@"6EF("AI8E]R97-U;'0I('L*( D)7W!H
M<%]I8F%S95]F<F5E7WAS<6QD82AI8E]R97-U;'0M/F]U=%]S<6QD82D["BT)
M"6EF("AI8E]R97-U;'0M/G-T;70@)B8@:6)?<F5S=6QT+3YT>7!E("$]($58
M14-55$5?4D5354Q4*2!["BT)"0E)0D1%0E5'*")$<F]P<&EN9R!S=&%T96UE
M;G0@:&%N9&QE("AF<F5E7W)E<W5L="!D=&]R*2XN+B(I.PHM"0D):7-C7V1S
M<6Q?9G)E95]S=&%T96UE;G0H24)?4U1!5%53+" F:6)?<F5S=6QT+3YS=&UT
M+"!$4U%,7V1R;W I.PHK"0EI9B H:6)?<F5S=6QT+3YQ=65R>2 A/2!.54Q,
M*2!["BL)"0E)0D1%0E5'*")Q=65R>2!S=&EL;"[EMAIL PROTECTED]&]N)[EMAIL PROTECTED]')O
M<"!S=&%T96UE;G0@:&%N9&QE(BD["BL)"0EI8E]R97-U;'0M/G%U97)Y+3YR
M97-U;'0@/2!.54Q,.PDO*B!);F1I8V%T92!T;R!Q=65R>[EMAIL PROTECTED]&AA="!R97-U
M;'0@:7,@<[EMAIL PROTECTED])?2!E;'-E('L**PD)"5]P:'!?:6)A<V5?
M9G)E95]S=&UT7VAA;F1L92AI8E]R97-U;'0M/FQI;FLL(&EB7W)E<W5L="T^
M<W1M="!44U)-3%-?0T,I.PH@"0E]"B )"65F<F5E*&EB7W)E<W5L="D["B )
M?0I 0" M,30R+#$Q("LQ-C(L,[EMAIL PROTECTED] *( EI9B H:6)?<75E<GDM/F]U=%]S
M<6QD82D@>PH@"0EE9G)E92AI8E]Q=65R>2T^;W5T7W-Q;&1A*3L*( E]"BT)
M:[EMAIL PROTECTED]&EB7W%U97)Y+3YS=&UT*2!["BT)"4E"1$5"54<H(D1R;W!P:6YG('-T
M871E;65N="!H86YD;&[EMAIL PROTECTED]&9R965?<75E<GDI+BXN(BD["BT)"6EF("AI<V-?
M9'-Q;%]F<F5E7W-T871E;65N="A)0E]35$%455,L("9I8E]Q=65R>2T^<W1M
M="[EMAIL PROTECTED]<F]P*2D@>PHM"0D)7W!H<%]I8F%S95]E<G)O<BA44U)-3%-?
M0RD["BT)"7T**PEI9B H:6)?<75E<GDM/G)E<W5L=" A/2!.54Q,*2!["BL)
M"4E"1$5"54<H(G)E<W5L="!S=&EL;"[EMAIL PROTECTED]&]N)[EMAIL PROTECTED]')O<"!S=&%T
M96UE;G0@:&%N9&QE(BD["BL)"6EB7W%U97)Y+3YR97-U;'0M/G%U97)Y(#T@
M3E5,3#L)[EMAIL PROTECTED]:6-A=&[EMAIL 
PROTECTED]&\@<F5S=6QT+"!T:&%T('%U97)Y(&ES(')E
M;&5A<V5D("HO"BL)?2!E;'-E('L**PD)7W!H<%]I8F%S95]F<F5E7W-T;71?
M:&%N9&QE*&EB7W%U97)Y+3YL:6YK+"!I8E]Q=65R>2T^<W1M="!44U)-3%-?
M0T,I.PH@"7T*( EI9B H:6)?<75E<GDM/FEN7V%R<F%Y*2!["B )"65F<F5E
M*&EB7W%U97)Y+3YI;E]A<G)A>2D["D! ("TQ-C8L,[EMAIL PROTECTED]($! "B *
M( EI9B H:6)?<75E<GD@([EMAIL PROTECTED],3"D@>PH@"0E)0D1%0E5'*")0<F5P87)I
M;F<@=&[EMAIL PROTECTED])E92!Q=65R>2!B>2!D=&]R+BXN(BD["BT*( D)7W!H<%]I8F%S
M95]F<F5E7W%U97)Y*&EB7W%U97)Y(%134DU,4U]#0RD["BT)"6EF("AI8E]Q
M=65R>2T^<W1A=&5M96YT7W1Y<&4@(3T@:7-C7VEN9F]?<W%L7W-T;71?97AE
M8U]P<F]C961U<F4I('L*+0D)"7IE;F1?;&ES=%]D96QE=&4H:6)?<75E<GDM
M/G)E<W5L=%]R97-?:60I.PHM"0E]"B )"65F<F5E*&EB7W%U97)Y*3L*( E]
M"B!]"D! ("TS,#(L.2 K,S$X+#$V($! "B )<W1A=&EC(&-H87(@:6YF;U]T
M>7!E6UT@/2![:7-C7VEN9F]?<W%L7W-T;71?='EP97T["B )8VAA<B!R97-U
M;'1;.%T["B **PDO*B!2971U<[EMAIL PROTECTED])3%5212P@:68@<75E<GES=')I;F<@
M:7,@96UP='[EMAIL PROTECTED] H*G%U97)Y(#T]("=<,"<I('L**PD)<&AP7V5R
M<F]R7V1O8W)E9BA.54Q,(%134DU,[EMAIL PROTECTED]).24Y'+" B475E<GES
M=')I;F<@96UP='DN(BD["BL)"7)E='5R;B!&04E,55)%.PHK"7T**PH@"6EB
M7W%U97)Y+3YL:6YK(#T@;&EN:SL*( EI8E]Q=65R>2T^=')A;G,@/2!T<F%N
M<SL*( EI8E]Q=65R>2T^<F5S=6QT7W)E<U]I9" ](# ["BL):6)?<75E<GDM
M/G)E<W5L=" ]($Y53$P["B ):6)?<75E<GDM/G-T;70@/2!.54Q,.PH@"6EB
M7W%U97)Y+3YI;E]A<G)A>2 ]($Y53$P["B ):6)?<75E<GDM/F]U=%]A<G)A
M>2 ]($Y53$P["D! ("TY,CDL-R K.34R+#$P($! "B )"7)E<R ](&5M86QL
M;V,H<VEZ96]F*&EB87-E7W)E<W5L="DK<VEZ96]F*&EB87-E7V%R<F%Y*2IM
[EMAIL PROTECTED],"QI8E]Q=65R>2T^;W5T7V%R<F%Y7V-N="TQ*2D["B )"7)E<RT^;&EN
M:R ](&EB7W%U97)Y+3YL:6YK.PH@"0ER97,M/G1R86YS(#T@:6)?<75E<GDM
M/G1R86YS.PHM"0ER97,M/G-T;70@/2!I8E]Q=65R>2T^<W1M=#L@"BL)"7)E
M<RT^<W1M=" ](&EB7W%U97)Y+3YS=&UT.PHK"0DO*B!I8E]R97-U;'[EMAIL PROTECTED]
M(&EB7W%U97)Y('!O:6YT(&%T(&5A8V@@;W1H97(@=&\@:&%N9&QE(')E;&5A
M<V4@;V8@<W1A=&5M96YT(&AA;F1L92!P<F]P97)L>2 J+PHK"0ER97,M/G%U
M97)Y(#T@:6)?<75E<GD["BL)"6EB7W%U97)Y+3YR97-U;'0@/2!R97,["B )
M"7)E<RT^<W1A=&5M96YT7W1Y<&4@/2!I8E]Q=65R>2T^<W1A=&5M96YT7W1Y
M<&4["B )"7)E<RT^:&%S7VUO<F5?<F]W<R ](#$["B *0$ @[EMAIL PROTECTED] K
M,3,Q-"PR,R! 0 H@<W1A=&EC(&EN="!?<&AP7VEB87-E7W9A<E]Z=F%L*'IV
[EMAIL PROTECTED];"[EMAIL PROTECTED]" J9&%T82P@:6YT('1Y<&4L(&EN="!L96XL("\J('M[
M>R J+PH@"6EN="!S8V%L92P@:6YT(&9L86<@5%-234Q37T1#*0H@>PHM"7-T
M871I8R!)[EMAIL PROTECTED]<W0@<V-A;&5S6UT@/2![(#$L(#$P+" Q,# L
M(#$P,# L(#$P,# P+" Q,# P,# L(#$P,# P,# L(#$P,# P,# P,"P@,3 P
M,# P,# P,"P@"BT)"3$P,# P,# P,# L($Q,7TQ)5"@Q,# P,# P,# P,"DL
M3$Q?3$E4*#$P,# P,# P,# P,"DL3$Q?3$E4*#$P,# P,# P,# P,# P*2Q,
M3%],250H,3 P,# P,# P,# P,# P*2P*+0D)3$Q?3$E4*#$P,# P,# P,# P
M,# P,# I+$Q,7TQ)5"@Q,# P,# P,# P,# P,# P*2Q,3%],250H,3 P,# P
M,# P,# P,# P,# P,"[EMAIL PROTECTED]&%T:6,@25-#7TE.5#8T(&-O;G-T('-C
M86QE<UM=(#T@>R Q+" Q,"P@,3 P+" Q,# P+" **PD),3 P,# L( HK"0DQ
M,# P,# L( HK"0DQ,# P,# P+" **PD),3 P,# P,# L"BL)"3$P,# P,# P
M,"P@"BL)"3$P,# P,# P,# L( HK"0E,3%],250H,3 P,# P,# P,# I+" *
M*PD)3$Q?3$E4*#$P,# P,# P,# P,"DL"BL)"4Q,7TQ)5"@Q,# P,# P,# P
M,# P*2P@"BL)"4Q,7TQ)5"@Q,# P,# P,# P,# P,"DL( HK"0E,3%],250H
M,3 P,# P,# P,# P,# P*2P**PD)3$Q?3$E4*#$P,# P,# P,# P,# P,# I
M+ HK"0E,3%],250H,3 P,# P,# P,# P,# P,# I+" **PD)3$Q?3$E4*#$P
M,# P,# P,# P,# P,# P,"DL( HK"0E,3%],250H,3 P,# P,# P,# P,# P
M,# P,"D**PE].PH@"B )<W=I=&-H("AT>7!E("[EMAIL PROTECTED]('L*( D)=6YS:6=N
-960@<VAO<G0@;#L*"@``
`
end

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to