Tufin / oasdiff

OpenAPI Diff and Breaking Changes
https://www.oasdiff.com
Apache License 2.0
663 stars 59 forks source link

Fixed panic in checks when schema created or deleted #554

Closed derbylock closed 2 months ago

derbylock commented 2 months ago

Fixed panic in check-request-property-type-changed.go but it could fix panics in other checks. Checks are written so that Revision property in SchemaDiff must be not nil for added and modified schemas and the Base property must be not nil for deleted and modified schemas. Currently it is not like this so many checks could fail with panic.

Example of fixed panic:

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x826474]

goroutine 6 [running]:
testing.tRunner.func1.2({0x90c500, 0xd5e730})
    /usr/local/go/src/testing/testing.go:1545 +0x238
testing.tRunner.func1()
    /usr/local/go/src/testing/testing.go:1548 +0x397
panic({0x90c500?, 0xd5e730?})
    /usr/local/go/src/runtime/panic.go:914 +0x21f
github.com/tufin/oasdiff/checker.RequestPropertyTypeChangedCheck.func1({0xc0001de816?, 0xda08e0?}, {0x0?, 0x0?}, 0x0?, 0x0?)
    /home/derbylock/git/oasdiff/checker/check-request-property-type-changed.go:52 +0x34
github.com/tufin/oasdiff/checker.processModifiedPropertiesDiff({0xc0001de816, 0xa}, {0x0, 0x0}, 0xc0001e82c0, 0xd0?, 0xc0001afa68)
    /home/derbylock/git/oasdiff/checker/checks-utils.go:62 +0x73
github.com/tufin/oasdiff/checker.processModifiedPropertiesDiff({0x0?, 0x0?}, {0xc0001a149c?, 0x4?}, 0xc0001e8160, 0xc0001a7450?, 0xc0001afa68)
    /home/derbylock/git/oasdiff/checker/checks-utils.go:92 +0x567
github.com/tufin/oasdiff/checker.processModifiedPropertiesDiff({0x0?, 0xc0001e6b70?}, {0x0?, 0x11a737d8d3bbde91?}, 0xc0001e8000, 0x0?, 0xc0001afa68)
    /home/derbylock/git/oasdiff/checker/checks-utils.go:97 +0x606
github.com/tufin/oasdiff/checker.CheckModifiedPropertiesDiff(...)
    /home/derbylock/git/oasdiff/checker/checks-utils.go:57
github.com/tufin/oasdiff/checker.RequestPropertyTypeChangedCheck(0x412485?, 0xc00005e6b8, {{0xc00005e6c0, 0x1, 0x1}, 0x1f, 0xb4, {{0x9842b7, 0x2}, {0x9842b7, ...}, ...}, ...})
    /home/derbylock/git/oasdiff/checker/check-request-property-type-changed.go:49 +0x885
github.com/tufin/oasdiff/checker.CheckBackwardCompatibilityUntilLevel({{0xc00005e6c0, 0x1, 0x1}, 0x1f, 0xb4, {{0x9842b7, 0x2}, {0x9842b7, 0x2}, 0xc00007e960}, ...}, ...)
    /home/derbylock/git/oasdiff/checker/checker.go:42 +0x169
github.com/tufin/oasdiff/checker_test.TestRequestPropertyTypeChangedCheckFromObjectToArray(0x0?)
    /home/derbylock/git/oasdiff/checker/check-request-property-type-changed_test.go:144 +0x2ed

Panic could be reproduced on main by the added test TestRequestPropertyTypeChangedCheckFromObjectToArray