Corrected interpretation of RFC 4122 UUID strings for GPT. Thanks Andrei Borzenkov.

This commit is contained in:
2016-08-15 10:24:21 +00:00
parent d832426c49
commit 237852c4e1
8 changed files with 142 additions and 122 deletions

View File

@ -3067,7 +3067,7 @@ ex:;
int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag)
{
int bin_count= 0, ret;
uint8_t u[16];
uint8_t u[16], tr;
if(strcmp(text, "random") == 0) {
xorriso->gpt_guid_mode= 0;
@ -3078,18 +3078,24 @@ int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag)
xorriso->gpt_guid_mode= 2;
return(1);
}
/* Try RFC 4122 : big endian XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX */
/* Try RFC 4122 : big endian XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Translate to UEFI: first three components to little-endian
*/
if(strlen(text) == 36) {
if(text[8] == '-' && text[13] == '-' && text[18] == '-' && text[23] == '-'){
ret= Hex_to_bin(text, 4, &bin_count, u, 0);
if(ret < 0 || bin_count != 4)
goto malformed;
tr= u[0]; u[0]= u[3]; u[3]= tr;
tr= u[1]; u[1]= u[2]; u[2]= tr;
ret= Hex_to_bin(text + 9, 2, &bin_count, u + 4, 0);
if(ret < 0 || bin_count != 2)
goto malformed;
tr= u[4]; u[4]= u[5]; u[5]= tr;
ret= Hex_to_bin(text + 14, 2, &bin_count, u + 6, 0);
if(ret < 0 || bin_count != 2)
goto malformed;
tr= u[6]; u[6]= u[7]; u[7]= tr;
ret= Hex_to_bin(text + 19, 2, &bin_count, u + 8, 0);
if(ret < 0 || bin_count != 2)
goto malformed;