Index: cackey.c
==================================================================
--- cackey.c
+++ cackey.c
@@ -1918,11 +1918,11 @@
 	unsigned char *buffer_p;
 	size_t init_buffer_len, size;
 	uint16_t respcode;
 	int send_ret;
 
-	CACKEY_DEBUG_PRINTF("Called.");
+	CACKEY_DEBUG_PRINTF("Called with buffer_len = %llu", (unsigned long long) buffer_len);
 
 	init_buffer_len = buffer_len;
 
 	cmd[2] = oid[0];
 	cmd[3] = oid[1];
@@ -1957,11 +1957,11 @@
 		CACKEY_DEBUG_PRINTF("APDU GET DATA returned %lu bytes, which is too short for a BER-TLV response", (unsigned long) buffer_len);
 
 		return(-1);
 	}
 
-	size = buffer_len;
+	size = init_buffer_len;
 	buffer_p = cackey_read_bertlv_tag(buffer, &buffer_len, 0x53, NULL, &size);
 
 	if (buffer_p == NULL) {
 		CACKEY_DEBUG_PRINTF("Tag decoding failed, returning in error.");
 
@@ -2601,11 +2601,11 @@
 	cackey_pcsc_id_type check_id_type;
 	struct cackey_pcsc_identity *curr_id;
 	struct cackey_tlv_entity *ccc_tlv, *ccc_curr, *app_tlv, *app_curr;
 	unsigned char *piv_oid, piv_oid_pivauth[] = {NISTSP800_73_3_OID_PIVAUTH}, piv_oid_signature[] = {NISTSP800_73_3_OID_SIGNATURE}, piv_oid_keymgt[] = {NISTSP800_73_3_OID_KEYMGT};
 	unsigned char curr_aid[7];
-	unsigned char buffer[8192], *buffer_p, *tmpbuf;
+	unsigned char buffer[1024 * 32], *buffer_p, *tmpbuf;
 	unsigned long outidx = 0;
 	char *piv_label;
 	cackey_ret transaction_ret;
 	ssize_t read_ret;
 	size_t buffer_len, tmpbuflen;