Exemplo n.º 1
0
static gboolean
mono_merp_write_params (MERPStruct *merp)
{
	int handle = g_open (merp->merpFilePath, O_TRUNC | O_WRONLY | O_CREAT, merp_file_permissions);
	g_assertf (handle != -1, "Could not open MERP file at %s", merp->merpFilePath);

	g_async_safe_fprintf(handle, "ApplicationBundleId: %s\n", merp->bundleIDArg);
	g_async_safe_fprintf(handle, "ApplicationVersion: %s\n", merp->versionArg);
	g_async_safe_fprintf(handle, "ApplicationBitness: %s\n", get_merp_bitness (merp->archArg));

	g_async_safe_fprintf(handle, "ApplicationName: %s\n", merp->serviceNameArg);
	g_async_safe_fprintf(handle, "ApplicationPath: %s\n", merp->servicePathArg);
	g_async_safe_fprintf(handle, "BlameModuleName: %s\n", merp->moduleName);
	g_async_safe_fprintf(handle, "BlameModuleVersion: %s\n", merp->moduleVersion);
	g_async_safe_fprintf(handle, "BlameModuleOffset: 0x%llx\n", (unsigned long long)merp->moduleOffset);
	g_async_safe_fprintf(handle, "ExceptionType: %s\n", get_merp_exctype (merp->exceptionArg));
	g_async_safe_fprintf(handle, "StackChecksum: 0x%llx\n", merp->hashes.offset_free_hash);
	g_async_safe_fprintf(handle, "StackHash: 0x%llx\n", merp->hashes.offset_rich_hash);

	// Provided by icall
	g_async_safe_fprintf(handle, "OSVersion: %s\n", merp->osVersion);
	g_async_safe_fprintf(handle, "LanguageID: 0x%x\n", merp->uiLidArg);
	g_async_safe_fprintf(handle, "SystemManufacturer: %s\n", merp->systemManufacturer);
	g_async_safe_fprintf(handle, "SystemModel: %s\n", merp->systemModel);
	g_async_safe_fprintf(handle, "EventType: %s\n", merp->eventType);

	close (handle);
	return TRUE;
}
Exemplo n.º 2
0
static void
mono_encode_merp (GString *output, MERPStruct *merp)
{
	// Provided by icall
	g_string_append_printf (output, "ApplicationBundleID: %s\n", merp->bundleIDArg);
	g_string_append_printf (output, "ApplicationVersion: %s\n", merp->versionArg);

	g_string_append_printf (output, "ApplicationBitness: %s\n", get_merp_bitness (merp->archArg));

	// Provided by icall
	g_string_append_printf (output, "ApplicationName: %s\n", merp->serviceNameArg);

	// When embedded, sometimes this really doesn't make sense.
	// FIXME: On OSX, could figure this out for just VS4Mac.
	g_string_append_printf (output, "ApplicationPath: %s\n", merp->servicePathArg ? merp->servicePathArg : "missing");

	// Provided by icall
	g_string_append_printf (output, "BlameModuleName: %s\n", merp->moduleName);
	g_string_append_printf (output, "BlameModuleVersion: %s\n", merp->moduleVersion);
	g_string_append_printf (output, "BlameModuleOffset: 0x%x\n", merp->moduleOffset);

	g_string_append_printf (output, "ExceptionType: %s\n", get_merp_exctype (merp->exceptionArg));

	g_string_append_printf (output, "StackChecksum: 0x%x\n", merp->hashes.offset_free_hash);
	g_string_append_printf (output, "StackHash: 0x%x\n", merp->hashes.offset_rich_hash);

	// Provided by icall
	g_string_append_printf (output, "OSVersion: %s\n", merp->osVersion);
	g_string_append_printf (output, "LanguageID: 0x%x\n", merp->uiLidArg);
	g_string_append_printf (output, "SystemManufacturer: %s\n", merp->systemManufacturer);
	g_string_append_printf (output, "SystemModel: %s\n", merp->systemModel);
}
Exemplo n.º 3
0
static gboolean
mono_write_wer_template (MERPStruct *merp)
{
	// Note about missing ProcessInformation block: we have no PID that makes sense
	// and when mono is embedded and used to run functions without an entry point,
	// there is no image that would make any semantic sense to send either. 
	// It's a nuanced problem, each way we can run mono would need a separate fix.

	int handle = g_open (merp->werXmlPath, O_WRONLY | O_CREAT | O_TRUNC, merp_file_permissions);
	g_assertf (handle != -1, "Could not open WER XML file at %s", merp->werXmlPath);

	// Provided by icall
	g_async_safe_fprintf(handle, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
	g_async_safe_fprintf(handle, "<WERReportMetadata>\n");
	g_async_safe_fprintf(handle, "<ProblemSignatures>\n");
	g_async_safe_fprintf(handle, "<EventType>%s</EventType>\n", merp->eventType);

	int i=0;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, merp->bundleIDArg, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, merp->versionArg, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, get_merp_bitness (merp->archArg), i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, merp->serviceNameArg, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, merp->moduleName, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, merp->moduleVersion, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>0x%zx</Parameter%d>\n", i, merp->moduleOffset, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, get_merp_exctype (merp->exceptionArg), i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>0x%llx</Parameter%d>\n", i, merp->hashes.offset_free_hash, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>0x%llx</Parameter%d>\n", i, merp->hashes.offset_rich_hash, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, merp->osVersion, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>0x%x</Parameter%d>\n", i, merp->uiLidArg, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, merp->systemManufacturer, i);
	i++;
	g_async_safe_fprintf(handle, "<Parameter%d>%s</Parameter%d>\n", i, merp->systemModel, i);
	i++;

	g_async_safe_fprintf(handle, "</ProblemSignatures>\n");
	g_async_safe_fprintf(handle, "</WERReportMetadata>\n");

	close (handle);

	return TRUE;
}
Exemplo n.º 4
0
static gboolean
mono_merp_write_fingerprint_payload (const char *non_param_data, const MERPStruct *merp)
{
	int handle = g_open (merp->crashLogPath, O_TRUNC | O_WRONLY | O_CREAT, merp_file_permissions);
	g_assertf (handle != -1, "Could not open crash log file at %s", merp->crashLogPath);

	g_async_safe_fprintf(handle, "{\n");
	g_async_safe_fprintf(handle, "\t\"payload\" : \n");
	g_write (handle, non_param_data, (guint32)strlen (non_param_data));	\
	g_async_safe_fprintf(handle, ",\n");

	g_async_safe_fprintf(handle, "\t\"parameters\" : \n{\n");
	g_async_safe_fprintf(handle, "\t\t\"ApplicationBundleId\" : \"%s\",\n", merp->bundleIDArg);
	g_async_safe_fprintf(handle, "\t\t\"ApplicationVersion\" : \"%s\",\n", merp->versionArg);
	g_async_safe_fprintf(handle, "\t\t\"ApplicationBitness\" : \"%s\",\n", get_merp_bitness (merp->archArg));
	g_async_safe_fprintf(handle, "\t\t\"ApplicationName\" : \"%s\",\n", merp->serviceNameArg);
	g_async_safe_fprintf(handle, "\t\t\"BlameModuleName\" : \"%s\",\n", merp->moduleName);
	g_async_safe_fprintf(handle, "\t\t\"BlameModuleVersion\" : \"%s\",\n", merp->moduleVersion);
	g_async_safe_fprintf(handle, "\t\t\"BlameModuleOffset\" : \"0x%lx\",\n", merp->moduleOffset);
	g_async_safe_fprintf(handle, "\t\t\"ExceptionType\" : \"%s\",\n", get_merp_exctype (merp->exceptionArg));
	g_async_safe_fprintf(handle, "\t\t\"StackChecksum\" : \"0x%llx\",\n", merp->hashes.offset_free_hash);
	g_async_safe_fprintf(handle, "\t\t\"StackHash\" : \"0x%llx\",\n", merp->hashes.offset_rich_hash);
	g_async_safe_fprintf(handle, "\t\t\"Extra\" : \n\t\t{\n");

	for (GSList *cursor = merp->annotations; cursor; cursor = cursor->next) {
		MonoMerpAnnotationEntry *iter = (MonoMerpAnnotationEntry *) cursor->data;
		g_async_safe_fprintf(handle, "\t\t\t\"%s\" : \"%s\"\n", iter->key, iter->value);
	}

	g_async_safe_fprintf(handle, "\t\t},\n");

	// Provided by icall
	g_async_safe_fprintf(handle, "\t\t\"OSVersion\" : \"%s\",\n", merp->osVersion);
	g_async_safe_fprintf(handle, "\t\t\"LanguageID\" : \"0x%x\",\n", merp->uiLidArg);
	g_async_safe_fprintf(handle, "\t\t\"SystemManufacturer\" : \"%s\",\n", merp->systemManufacturer);
	g_async_safe_fprintf(handle, "\t\t\"SystemModel\" : \"%s\",\n", merp->systemModel);
	g_async_safe_fprintf(handle, "\t\t\"EventType\" : \"%s\"\n", merp->eventType);

	// End of parameters 
	g_async_safe_fprintf(handle, "\t}\n");
	g_async_safe_fprintf(handle, "}\n");

	// End of object
	close (handle);

	return TRUE;
}