From 06aa781bb2faee521fd9b6c5ca6326c17b920f58 Mon Sep 17 00:00:00 2001 From: Sacha Al Himdani Date: Mon, 16 Feb 2026 17:05:40 +0100 Subject: [PATCH] Allow more permissive bracket validations Signed-off-by: Sacha Al Himdani --- e2e/console/audit_test.go | 15 --- e2e/console/datum_test.go | 16 --- e2e/console/document_test.go | 18 --- e2e/console/framework_test.go | 15 --- e2e/console/measure_test.go | 16 --- e2e/console/meeting_test.go | 16 --- pkg/validator/validator_security.go | 13 +- pkg/validator/validator_security_test.go | 165 +++++++++++++++++++---- 8 files changed, 142 insertions(+), 132 deletions(-) diff --git a/e2e/console/audit_test.go b/e2e/console/audit_test.go index 036501f93..968a7eac8 100644 --- a/e2e/console/audit_test.go +++ b/e2e/console/audit_test.go @@ -182,13 +182,6 @@ func TestAudit_Create_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - input: map[string]any{ - "name": "Test < Audit", - }, - wantErrorContains: "angle brackets", - }, { name: "name with newline", input: map[string]any{ @@ -425,14 +418,6 @@ func TestAudit_Update_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - setup: func() string { return baseAuditID }, - input: func(id string) map[string]any { - return map[string]any{"id": id, "name": "Test < Audit"} - }, - wantErrorContains: "angle brackets", - }, { name: "name with newline", setup: func() string { return baseAuditID }, diff --git a/e2e/console/datum_test.go b/e2e/console/datum_test.go index 2ee98c242..f9c162613 100644 --- a/e2e/console/datum_test.go +++ b/e2e/console/datum_test.go @@ -174,14 +174,6 @@ func TestDatum_Create_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - input: map[string]any{ - "name": "Test < Datum", - "dataClassification": "INTERNAL", - }, - wantErrorContains: "angle brackets", - }, { name: "name with newline", input: map[string]any{ @@ -397,14 +389,6 @@ func TestDatum_Update_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - setup: func() string { return baseDatumID }, - input: func(id string) map[string]any { - return map[string]any{"id": id, "name": "Test < Datum"} - }, - wantErrorContains: "angle brackets", - }, { name: "name with newline", setup: func() string { return baseDatumID }, diff --git a/e2e/console/document_test.go b/e2e/console/document_test.go index a8100f25b..3bdc6fbd7 100644 --- a/e2e/console/document_test.go +++ b/e2e/console/document_test.go @@ -192,16 +192,6 @@ func TestDocument_Create_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "title with angle brackets", - input: map[string]any{ - "title": "Test < Document", - "content": "Test content", - "documentType": "POLICY", - "classification": "INTERNAL", - }, - wantErrorContains: "angle brackets", - }, { name: "title with newline", input: map[string]any{ @@ -418,14 +408,6 @@ func TestDocument_Update_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "title with angle brackets", - setup: func() string { return baseDocumentID }, - input: func(id string) map[string]any { - return map[string]any{"id": id, "title": "Test < Document"} - }, - wantErrorContains: "angle brackets", - }, { name: "title with newline", setup: func() string { return baseDocumentID }, diff --git a/e2e/console/framework_test.go b/e2e/console/framework_test.go index 2914881b2..74569ee41 100644 --- a/e2e/console/framework_test.go +++ b/e2e/console/framework_test.go @@ -144,13 +144,6 @@ func TestFramework_Create_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - input: map[string]any{ - "name": "Test < Framework", - }, - wantErrorContains: "angle brackets", - }, // Newline validation { name: "name with newline", @@ -359,14 +352,6 @@ func TestFramework_Update_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - setup: func() string { return baseFrameworkID }, - input: func(id string) map[string]any { - return map[string]any{"id": id, "name": "Test < Framework"} - }, - wantErrorContains: "angle brackets", - }, { name: "description with HTML tags", setup: func() string { return baseFrameworkID }, diff --git a/e2e/console/measure_test.go b/e2e/console/measure_test.go index 70b638b03..6c5c801c1 100644 --- a/e2e/console/measure_test.go +++ b/e2e/console/measure_test.go @@ -205,14 +205,6 @@ func TestMeasure_Create_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - input: map[string]any{ - "name": "Test < Measure", - "category": "POLICY", - }, - wantErrorContains: "angle brackets", - }, { name: "description with HTML tags", input: map[string]any{ @@ -473,14 +465,6 @@ func TestMeasure_Update_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - setup: func() string { return baseMeasureID }, - input: func(id string) map[string]any { - return map[string]any{"id": id, "name": "Test < Measure"} - }, - wantErrorContains: "angle brackets", - }, { name: "description with HTML tags", setup: func() string { return baseMeasureID }, diff --git a/e2e/console/meeting_test.go b/e2e/console/meeting_test.go index 29461dbd2..3cb16d178 100644 --- a/e2e/console/meeting_test.go +++ b/e2e/console/meeting_test.go @@ -135,14 +135,6 @@ func TestMeeting_Create_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - input: map[string]any{ - "name": "Test < Meeting", - "date": time.Now().Format(time.RFC3339Nano), - }, - wantErrorContains: "angle brackets", - }, { name: "name with newline", input: map[string]any{ @@ -343,14 +335,6 @@ func TestMeeting_Update_Validation(t *testing.T) { }, wantErrorContains: "HTML", }, - { - name: "name with angle brackets", - setup: func() string { return baseMeetingID }, - input: func(id string) map[string]any { - return map[string]any{"meetingId": id, "name": "Test < Meeting"} - }, - wantErrorContains: "angle brackets", - }, { name: "name with newline", setup: func() string { return baseMeetingID }, diff --git a/pkg/validator/validator_security.go b/pkg/validator/validator_security.go index 861d50a81..7f1fb91d0 100644 --- a/pkg/validator/validator_security.go +++ b/pkg/validator/validator_security.go @@ -17,18 +17,17 @@ package validator import ( "fmt" "regexp" - "strings" ) var ( - htmlTagRegex = regexp.MustCompile(`<[^>]*>`) + htmlTagRegex = regexp.MustCompile(`]*>|]*>`) ) -// NoHTML validates that a string does not contain HTML tags or angle brackets. +// NoHTML validates that a string does not contain HTML tags. // It rejects: // - HTML tags (e.g.,