Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 30 additions & 25 deletions pkg/codesign/types/requirement.go
Original file line number Diff line number Diff line change
Expand Up @@ -523,38 +523,43 @@ func evalExpression(r *bytes.Reader, syntaxLevel int) (string, error) {
}
}

// evalRequirementSet reads and evaluates all expressions of a single requirement
func evalRequirementSet(r *bytes.Reader) (string, error) {
var reqSet []string
for {
rsPart, err := evalExpression(r, slTop)
if err == io.EOF {
break
}
if err != nil {
return "", err
}
reqSet = append(reqSet, rsPart)
}
return strings.Join(reqSet, " "), nil
}

// ParseRequirements parses the requirements set bytes
func ParseRequirements(r *bytes.Reader, reqs Requirements) (string, error) {
// NOTE: codesign -d -r- MACHO (to display requirement sets)
r.Seek(int64(reqs.Offset), io.SeekStart)

reqSet, err := evalRequirementSet(r)
if err != nil {
return "", err
}

switch reqs.Type {
case HostRequirementType:
var reqSet []string
for {
rsPart, err := evalExpression(r, slTop)
if err == io.EOF {
break
}
if err != nil {
return "", err
}
reqSet = append(reqSet, rsPart)
}
return "host => " + strings.Join(reqSet, " "), nil
case DesignatedRequirementType:
var reqSet []string
for {
rsPart, err := evalExpression(r, slTop)
if err == io.EOF {
break
}
if err != nil {
return "", err
}
reqSet = append(reqSet, rsPart)
}
return strings.Join(reqSet, " "), nil
return reqSet, nil
case HostRequirementType:
return "host => " + reqSet, nil
case GuestRequirementType:
return "guest => " + reqSet, nil
case LibraryRequirementType:
return "library => " + reqSet, nil
case PluginRequirementType:
return "plugin => " + reqSet, nil
default:
return "", fmt.Errorf("failed to dump requirements set; found unsupported codesign requirement type '%s', please notify author", reqs.Type)
}
Expand Down