diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d798cae10..b6636ce3f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - #3418, Fix OpenAPI not tagging a FK column correctly on O2O relationships - @laurenceisla - #3256, Fix wrong http status for pg error `42P17 infinite recursion` - @taimoorzaeem - #3404, Clarify the `PGRST121` (could not parse RAISE 'PGRST') error message - @laurenceisla + - #3267, Fix wrong `503 Service Unavailable` on pg error `53400` - @taimoorzaeem ### Deprecated diff --git a/src/PostgREST/Error.hs b/src/PostgREST/Error.hs index eefe579439..28df23a078 100644 --- a/src/PostgREST/Error.hs +++ b/src/PostgREST/Error.hs @@ -489,6 +489,7 @@ pgErrorStatus authed (SQL.SessionUsageError (SQL.QueryError _ _ (SQL.ResultError '3':'9':_ -> HTTP.status500 -- external routine invocation '3':'B':_ -> HTTP.status500 -- savepoint exception '4':'0':_ -> HTTP.status500 -- tx rollback + "53400" -> HTTP.status500 -- config limit exceeded '5':'3':_ -> HTTP.status503 -- insufficient resources '5':'4':_ -> HTTP.status413 -- too complex '5':'5':_ -> HTTP.status500 -- obj not on prereq state diff --git a/test/spec/Feature/Query/RpcSpec.hs b/test/spec/Feature/Query/RpcSpec.hs index 60ae3d343c..0e4af838e2 100644 --- a/test/spec/Feature/Query/RpcSpec.hs +++ b/test/spec/Feature/Query/RpcSpec.hs @@ -1478,3 +1478,11 @@ spec actualPgVersion = "details":"DETAIL is missing in the RAISE statement", "hint":"DETAIL must be a JSON object with obligatory keys: 'status', 'headers' and optional key: 'status_text'."}|] { matchStatus = 500 } + + -- here JWT has the role: postgrest_test_superuser + context "test function temp_file_limit" $ + let auth = authHeaderJWT "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoicG9zdGdyZXN0X3Rlc3Rfc3VwZXJ1c2VyIiwiaWQiOiJqZG9lIn0.LQ-qx0ArBnfkwQQhIHKF5cS-lzl0gnTPI8NLoPbL5Fg" in + it "should return http status 500" $ + request methodGet "/rpc/temp_file_limit" [auth] "" `shouldRespondWith` + [json|{"code":"53400","message":"temporary file size exceeds temp_file_limit (1kB)","details":null,"hint":null}|] + { matchStatus = 500 } diff --git a/test/spec/fixtures/roles.sql b/test/spec/fixtures/roles.sql index a628bf1e07..3590c6edbc 100644 --- a/test/spec/fixtures/roles.sql +++ b/test/spec/fixtures/roles.sql @@ -1,6 +1,7 @@ -DROP ROLE IF EXISTS postgrest_test_anonymous, postgrest_test_default_role, postgrest_test_author; +DROP ROLE IF EXISTS postgrest_test_anonymous, postgrest_test_default_role, postgrest_test_author, postgrest_test_superuser; CREATE ROLE postgrest_test_anonymous; CREATE ROLE postgrest_test_default_role; CREATE ROLE postgrest_test_author; +CREATE ROLE postgrest_test_superuser WITH SUPERUSER; -GRANT postgrest_test_anonymous, postgrest_test_default_role, postgrest_test_author TO :PGUSER; +GRANT postgrest_test_anonymous, postgrest_test_default_role, postgrest_test_author, postgrest_test_superuser TO :PGUSER; diff --git a/test/spec/fixtures/schema.sql b/test/spec/fixtures/schema.sql index e8d0f848da..8b7458d676 100644 --- a/test/spec/fixtures/schema.sql +++ b/test/spec/fixtures/schema.sql @@ -3771,3 +3771,9 @@ select * from test.projects; create or replace view test.infinite_recursion as select * from test.infinite_recursion; + + +create or replace function temp_file_limit() +returns bigint as $$ + select COUNT(*) FROM generate_series('-infinity'::TIMESTAMP, 'epoch'::TIMESTAMP, INTERVAL '1 DAY'); +$$ language sql security definer set temp_file_limit to '1kB';