Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (178598 => 178599)
--- trunk/Source/_javascript_Core/ChangeLog 2015-01-16 21:37:42 UTC (rev 178598)
+++ trunk/Source/_javascript_Core/ChangeLog 2015-01-16 21:40:23 UTC (rev 178599)
@@ -1,3 +1,24 @@
+2015-01-16 Brian J. Burg <[email protected]>
+
+ Web Inspector: code generator should fail on duplicate parameter and member names
+ https://bugs.webkit.org/show_bug.cgi?id=140555
+
+ Reviewed by Timothy Hatcher.
+
+ * inspector/scripts/codegen/models.py:
+ (find_duplicates): Add a helper function to find duplicates in a list.
+ (Protocol.parse_type_declaration):
+ (Protocol.parse_command):
+ (Protocol.parse_event):
+ * inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error: Added.
+ * inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error: Added.
+ * inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error: Added.
+ * inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error: Added.
+ * inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json: Added.
+ * inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json: Added.
+ * inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json: Added.
+ * inspector/scripts/tests/fail-on-duplicate-type-member-names.json: Added.
+
2015-01-16 Michael Saboff <[email protected]>
REGRESSION (r174226): Header on huffingtonpost.com is too large
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/models.py (178598 => 178599)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/models.py 2015-01-16 21:37:42 UTC (rev 178598)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/models.py 2015-01-16 21:40:23 UTC (rev 178599)
@@ -25,6 +25,7 @@
# THE POSSIBILITY OF SUCH DAMAGE.
import logging
+import collections
log = logging.getLogger('global')
@@ -33,6 +34,10 @@
return str[:1].upper() + str[1:]
+def find_duplicates(l):
+ return [key for key, count in collections.Counter(l).items() if count > 1]
+
+
_FRAMEWORK_CONFIG_MAP = {
"Global": {
},
@@ -326,6 +331,10 @@
raise ParseException("Malformed type specification: properties is not an array")
type_members.extend([self.parse_type_member(member) for member in json['properties']])
+ duplicate_names = find_duplicates([member.member_name for member in type_members])
+ if len(duplicate_names) > 0:
+ raise ParseException("Malformed domain specification: type declaration for %s has duplicate member names" % json['id'])
+
type_ref = TypeReference(json['type'], json.get('$ref'), json.get('enum'), json.get('items'))
return TypeDeclaration(json['id'], type_ref, json.get("description", ""), type_members)
@@ -348,11 +357,19 @@
raise ParseException("Malformed command specification: parameters is not an array")
call_parameters.extend([self.parse_call_or_return_parameter(parameter) for parameter in json['parameters']])
+ duplicate_names = find_duplicates([param.parameter_name for param in call_parameters])
+ if len(duplicate_names) > 0:
+ raise ParseException("Malformed domain specification: call parameter list for command %s has duplicate parameter names" % json['name'])
+
if 'returns' in json:
if not isinstance(json['returns'], list):
raise ParseException("Malformed command specification: returns is not an array")
return_parameters.extend([self.parse_call_or_return_parameter(parameter) for parameter in json['returns']])
+ duplicate_names = find_duplicates([param.parameter_name for param in return_parameters])
+ if len(duplicate_names) > 0:
+ raise ParseException("Malformed domain specification: return parameter list for command %s has duplicate parameter names" % json['name'])
+
return Command(json['name'], call_parameters, return_parameters, json.get('description', ""), json.get('async', False))
def parse_event(self, json):
@@ -366,6 +383,10 @@
raise ParseException("Malformed event specification: parameters is not an array")
event_parameters.extend([self.parse_call_or_return_parameter(parameter) for parameter in json['parameters']])
+ duplicate_names = find_duplicates([param.parameter_name for param in event_parameters])
+ if len(duplicate_names) > 0:
+ raise ParseException("Malformed domain specification: parameter list for event %s has duplicate parameter names" % json['name'])
+
return Event(json['name'], event_parameters, json.get('description', ""))
def parse_call_or_return_parameter(self, json):
Added: trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error (0 => 178599)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error 2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1 @@
+ERROR: Malformed domain specification: call parameter list for command processPoints has duplicate parameter names
Added: trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error (0 => 178599)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error 2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1 @@
+ERROR: Malformed domain specification: return parameter list for command processPoints has duplicate parameter names
Added: trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error (0 => 178599)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error 2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1 @@
+ERROR: Malformed domain specification: parameter list for event processedPoints has duplicate parameter names
Added: trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error (0 => 178599)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error 2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1 @@
+ERROR: Malformed domain specification: type declaration for Point has duplicate member names
Added: trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json (0 => 178599)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json 2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1,16 @@
+{
+ "domain": "Overlay",
+ "commands": [
+ {
+ "name": "processPoints",
+ "parameters": [
+ { "name": "point", "type": "number" },
+ { "name": "point", "type": "number" }
+ ],
+ "returns": [
+ { "name": "result1", "type": "string" },
+ { "name": "result2", "type": "string" }
+ ]
+ }
+ ]
+}
Added: trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json (0 => 178599)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json 2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1,16 @@
+{
+ "domain": "Overlay",
+ "commands": [
+ {
+ "name": "processPoints",
+ "parameters": [
+ { "name": "point1", "type": "number" },
+ { "name": "point2", "type": "number" }
+ ],
+ "returns": [
+ { "name": "result", "type": "string" },
+ { "name": "result", "type": "string" }
+ ]
+ }
+ ]
+}
Added: trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json (0 => 178599)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json 2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1,12 @@
+{
+ "domain": "Overlay",
+ "events": [
+ {
+ "name": "processedPoints",
+ "parameters": [
+ { "name": "point", "type": "number" },
+ { "name": "point", "type": "number" }
+ ]
+ }
+ ]
+}
Added: trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-type-member-names.json (0 => 178599)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-type-member-names.json (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-type-member-names.json 2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1,15 @@
+[
+{
+ "domain": "OverlayTypes",
+ "types": [
+ {
+ "id": "Point",
+ "type": "object",
+ "properties": [
+ { "name": "x", "type": "integer" },
+ { "name": "x", "type": "integer" }
+ ]
+ }
+ ]
+}
+]