CFErrorRef do_sec_fail(OSStatus code, const char *func, const char *file, int line) { CFStringRef msg = CFStringCreateWithFormat(NULL, NULL, CFSTR("Internal error #%x at %s %s:%d"), code, func, file, line); CFErrorRef err = fancy_error(CFSTR("Internal CSSM error"), code, msg); CFRelease(msg); return err; }
/* Function name - MY_YY_fancy_error Description - write error report line to stderr, where the error token is underlined with ^^^ characters Input - location location of error (columns, lines) file filename of source file that contains the error Return Code/Output - 0 - ok, -1 error */ static int fancy_error_report(YYLTYPE *location, const char *file, int show_highlight) { int line_num = 1; int ch; char by; DBUF buf; FILE *fp = fopen(file,"r"); if (!fp) { return -1; } DBUF_init( &buf, 10 ); while( (ch = fgetc( fp ) ) != -1 ) { if (ch == '\n') { if (line_num == location->first_line) { break; } ++line_num; continue; } if (ch == '\t') ch = ' '; if (line_num == location->first_line) { by = (char ) ch; DBUF_add( &buf, &by, 1); } } DBUF_add_null( &buf ); fancy_error( (char *) buf.buf, location->first_line, location->first_column, location->last_column, show_highlight ); fclose(fp); return 0; }
{ SecTransformInstanceBlock instanceBlock = ^{ CFErrorRef result = NULL; SecTransformCustomSetAttribute(ref, kSecDecodeTypeAttribute, kSecTransformMetaAttributeRequired, kCFBooleanTrue); SecTransformSetAttributeAction(ref, kSecTransformActionAttributeNotification, kSecDecodeTypeAttribute, ^(SecTransformStringOrAttributeRef attribute, CFTypeRef value) { if (NULL == value || CFGetTypeID(value) != CFStringGetTypeID()) { CFErrorRef errorResult = fancy_error(kSecTransformErrorDomain, kSecTransformErrorInvalidInput, CFSTR("Decode type was not a CFStringRef")); return (CFTypeRef)errorResult; } // value is a CFStringRef if (kCFCompareEqualTo == CFStringCompare(value, kSecBase64Encoding, 0)) { __block struct { unsigned char a[4]; } leftover; static const short int in_chunk_size = 4; static const short int out_chunk_size = 3; __block int leftover_cnt = 0; SecTransformSetDataAction(ref, kSecTransformActionProcessData, ^(CFTypeRef value) { CFDataRef d = value;