diff --git a/ChangeLog b/ChangeLog index caa9e59..a864df3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-12-24 Richard Frith-Macdonald + + * JDBC.m: Don't store pointer to jni information in local variable + until after we have opened the connection to the database, or we + may be using a null pointer and generate a crash. + 2006-12-22 Richard Frith-Macdonald * configure.ac: save/restore LIBS after jdbc check so that other diff --git a/JDBC.m b/JDBC.m index 530640d..bed5665 100644 --- a/JDBC.m +++ b/JDBC.m @@ -1089,7 +1089,7 @@ NSLog(@"CONNECT '%@', '%@', '%@'", CREATE_AUTORELEASE_POOL(arp); NSString *stmt = [info objectAtIndex: 0]; JNIEnv *env = SQLClientJNIEnv(); - JInfo *ji = (JInfo*)extra; + JInfo *ji; if ([stmt length] == 0) { @@ -1121,6 +1121,8 @@ NSLog(@"CONNECT '%@', '%@', '%@'", [self name], stmt]; } + ji = (JInfo*)extra; + if ([info count] > 1) { unsigned i; @@ -1168,6 +1170,7 @@ NSLog(@"CONNECT '%@', '%@', '%@'", { if (_inTransaction == NO) { + ji = (JInfo*)extra; // Not in a transaction ... rollback to clear error state (*env)->CallVoidMethod (env, ji->connection, ji->rollback); JExceptionClear (env); @@ -1193,7 +1196,7 @@ NSLog(@"CONNECT '%@', '%@', '%@'", NSMutableArray *records = nil; CREATE_AUTORELEASE_POOL(arp); JNIEnv *env = SQLClientJNIEnv(); - JInfo *ji = (JInfo*)extra; + JInfo *ji; if ([stmt length] == 0) { @@ -1229,6 +1232,8 @@ NSLog(@"CONNECT '%@', '%@', '%@'", [self name], stmt]; } + ji = (JInfo*)extra; + result = (*env)->CallObjectMethod (env, ji->statement, ji->executeQuery, JStringFromNSString(env, stmt)); JException (env);