Blob Blame History Raw
--- libchewing-0.3.0/src/hanyupinyin.c.1-bz199353	2006-05-15 16:49:43.000000000 +1000
+++ libchewing-0.3.0/src/hanyupinyin.c	2006-09-05 10:47:46.000000000 +1000
@@ -95,13 +95,15 @@
 	 * zuinKeySeq[] has at most 3 letters.
 	 */
 	keymap key, *res;
-	strcpy( key.pinyin, pinyinKeySeq );
+	strncpy( key.pinyin, pinyinKeySeq, 6 );
 
 	DEBUG_CHECKPOINT();
 	res = bsearch( &key, keytable, N_TOTAL, sizeof(keymap), compkey );
-	if ( res != NULL )
+	if ( res != NULL ){
 		strcpy( zuinKeySeq, res->zuin );
+		return 0;
+	}
 	else
 		zuinKeySeq = strdup( "" );
-	return 0;
+	return 1;
 }
--- libchewing-0.3.0/src/zuin.c.1-bz199353	2006-05-15 16:49:43.000000000 +1000
+++ libchewing-0.3.0/src/zuin.c	2006-09-05 10:47:46.000000000 +1000
@@ -392,14 +392,16 @@
 static int PinYinInput( ZuinData *pZuin, int key )
 {
 	int err = 0, status, i;
-	char zuinKeySeq[ 5 ], buf[ 2 ];
+	char zuinKeySeq[ 5 ];
 
 	DEBUG_CHECKPOINT();
 
 	if ( IsPinYinEndKey( pZuin, key ) ) {
 		err = HanyuPinYinToZuin( pZuin->pinYinData.keySeq, zuinKeySeq );
-		if (err)
-			return ZUIN_KEY_ERROR;
+		if (err){
+			pZuin->pinYinData.keySeq[0] = '\0';
+			return ZUIN_ABSORB;
+		}
 
 		DEBUG_OUT( "zuinKeySeq: %s\n", zuinKeySeq );
 		for ( i = 0; i < strlen( zuinKeySeq ); i++ ) {
@@ -420,6 +422,7 @@
 		pZuin->pinYinData.keySeq[ 0 ] = '\0';
 		return EndKeyProcess( pZuin, key, 1 );
 	}
+	char buf[2];
 	buf[ 0 ] = key; buf[ 1 ] = '\0';
 	strcat( pZuin->pinYinData.keySeq, buf );