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;
}
Ejemplo n.º 2
0
/*
  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;