From b36532a2eba07ed11eb9f501cc9afd7673ef10c5 Mon Sep 17 00:00:00 2001 From: Christoph Thiede <christoph.thiede@student.hpi.de> Date: Fri, 3 Jan 2025 02:23:27 +0100 Subject: [PATCH] add restrictive pragmatic sandbox --- ...context.activateMethod.withArgs.receiver.do..st | 4 +++- .../PragmaticSandbox.class/methodProperties.json | 2 +- .../RestrictivePragmaticSandbox.class/README.md | 1 + .../instance/doMorphOpenInWorld.context..st | 5 +++++ .../instance/doObjectInspect.perform.context..st | 5 +++++ .../doToolSetBrowse.perform.args.context..st | 6 ++++++ .../instance/pragmatic.forbidden..st | 5 +++++ .../instance/pragmaticForbidden..st | 4 ++++ .../methodProperties.json | 9 +++++++++ .../properties.json | 14 ++++++++++++++ 10 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/README.md create mode 100644 packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doMorphOpenInWorld.context..st create mode 100644 packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doObjectInspect.perform.context..st create mode 100644 packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doToolSetBrowse.perform.args.context..st create mode 100644 packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/pragmatic.forbidden..st create mode 100644 packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/pragmaticForbidden..st create mode 100644 packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/methodProperties.json create mode 100644 packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/properties.json diff --git a/packages/SimulationStudio-Sandbox.package/PragmaticSandbox.class/instance/context.activateMethod.withArgs.receiver.do..st b/packages/SimulationStudio-Sandbox.package/PragmaticSandbox.class/instance/context.activateMethod.withArgs.receiver.do..st index 6be91dd..4506f5a 100644 --- a/packages/SimulationStudio-Sandbox.package/PragmaticSandbox.class/instance/context.activateMethod.withArgs.receiver.do..st +++ b/packages/SimulationStudio-Sandbox.package/PragmaticSandbox.class/instance/context.activateMethod.withArgs.receiver.do..st @@ -26,4 +26,6 @@ context: aContext activateMethod: aCompiledMethod withArgs: arguments receiver: self perform: selector withArguments: args] on: Error do: [^ super context: aContext activateMethod: aCompiledMethod withArgs: arguments receiver: receiver do: aBlock]. - ^ aContext push: result \ No newline at end of file + ^ (aContext isPrimFailToken: result) + ifTrue: [result second value] + ifFalse: [aContext push: result] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/PragmaticSandbox.class/methodProperties.json b/packages/SimulationStudio-Sandbox.package/PragmaticSandbox.class/methodProperties.json index 407d836..ccc1f5d 100644 --- a/packages/SimulationStudio-Sandbox.package/PragmaticSandbox.class/methodProperties.json +++ b/packages/SimulationStudio-Sandbox.package/PragmaticSandbox.class/methodProperties.json @@ -11,7 +11,7 @@ "addPragmaticMultiMethodsTo:" : "ct 1/3/2025 01:37", "assertUnmodifiedObject:" : "ct 1/2/2025 04:50", "basicEvaluate:" : "ct 12/29/2024 06:20", - "context:activateMethod:withArgs:receiver:do:" : "ct 1/1/2025 20:35", + "context:activateMethod:withArgs:receiver:do:" : "ct 1/3/2025 01:30", "context:doPrimitive:method:receiver:args:do:" : "ct 12/29/2024 04:56", "doCompiledMethodPreamble:" : "ct 1/2/2025 22:56", "doDateAndTime:perform:context:" : "ct 1/2/2025 04:49", diff --git a/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/README.md b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/README.md new file mode 100644 index 0000000..1b3ec55 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/README.md @@ -0,0 +1 @@ +I am a more restrictive version of the pragmatic sandbox. I explicitly disallow common headful operations that should typically not be done in headless environments. \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doMorphOpenInWorld.context..st b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doMorphOpenInWorld.context..st new file mode 100644 index 0000000..88e1e74 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doMorphOpenInWorld.context..st @@ -0,0 +1,5 @@ +pragmatic methods - Morph +doMorphOpenInWorld: aMorph context: aContext + <pragmaticClass: #Morph selector: #openInWorld> + + ^ self pragmatic: aContext forbidden: 'Use #imageForm instead' \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doObjectInspect.perform.context..st b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doObjectInspect.perform.context..st new file mode 100644 index 0000000..ed2559d --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doObjectInspect.perform.context..st @@ -0,0 +1,5 @@ +pragmatic methods - Object +doObjectInspect: aMorph perform: selector context: aContext + <pragmaticClass: #Object selectors: #(inspect explore)> + + ^ self pragmatic: aContext forbidden: 'Use #longPrintString instead' \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doToolSetBrowse.perform.args.context..st b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doToolSetBrowse.perform.args.context..st new file mode 100644 index 0000000..5c5d04b --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/doToolSetBrowse.perform.args.context..st @@ -0,0 +1,6 @@ +pragmatic methods - ToolSet +doToolSetBrowse: aToolSetClass perform: selector args: args context: aContext + <pragmaticClass: #'ToolSet class'> + + self assert: (selector beginsWithAnyOf: #(browse open handle inspect)). + ^ self pragmatic: aContext forbidden: 'Don''t use ToolSet in headless context' \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/pragmatic.forbidden..st b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/pragmatic.forbidden..st new file mode 100644 index 0000000..fa85914 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/pragmatic.forbidden..st @@ -0,0 +1,5 @@ +private +pragmatic: aContext forbidden: messageText + + ^ self nextSimulator context: aContext primitiveFailTokenFor: + [self nextSimulator context: aContext activateOperationForbidden: messageText] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/pragmaticForbidden..st b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/pragmaticForbidden..st new file mode 100644 index 0000000..eade0e8 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/instance/pragmaticForbidden..st @@ -0,0 +1,4 @@ +private +pragmaticForbidden: aContext + + ^ self pragmatic: aContext forbidden: 'Operation forbidden' \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/methodProperties.json b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/methodProperties.json new file mode 100644 index 0000000..48f5572 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/methodProperties.json @@ -0,0 +1,9 @@ +{ + "class" : { + }, + "instance" : { + "doMorphOpenInWorld:context:" : "ct 1/3/2025 01:32", + "doObjectInspect:perform:context:" : "ct 1/3/2025 01:32", + "doToolSetBrowse:perform:args:context:" : "ct 1/3/2025 01:35", + "pragmatic:forbidden:" : "ct 1/3/2025 01:31", + "pragmaticForbidden:" : "ct 1/3/2025 01:27" } } diff --git a/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/properties.json b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/properties.json new file mode 100644 index 0000000..0b2feaa --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/RestrictivePragmaticSandbox.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Sandbox", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "ct 1/3/2025 02:22", + "instvars" : [ + ], + "name" : "RestrictivePragmaticSandbox", + "pools" : [ + ], + "super" : "PragmaticSandbox", + "type" : "normal" }