Skip to content

Commit

Permalink
feat: add scene flag
Browse files Browse the repository at this point in the history
  • Loading branch information
NSEcho committed Sep 17, 2023
1 parent 941d15e commit 9d10541
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
8 changes: 7 additions & 1 deletion cmd/fuzz.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ var fuzzCmd = &cobra.Command{
return err
}

scene, err := cmd.Flags().GetString("scene")
if err != nil {
return err
}

l.Infof("Fuzzing base URL \"%s\"", base)
if strings.Contains(base, "FUZZ") {
l.Infof("Read %d inputs from %s directory",
Expand Down Expand Up @@ -159,7 +164,7 @@ var fuzzCmd = &cobra.Command{

l.Infof("Loaded script")

_ = script.ExportsCall("setup", method, uiapp, delegate)
_ = script.ExportsCall("setup", method, uiapp, delegate, scene)
l.Infof("Finished setup")

m := mutator.NewMutator(base, runs, fn, validInputs...)
Expand All @@ -185,6 +190,7 @@ func init() {
fuzzCmd.Flags().StringP("method", "m", "delegate", "method of opening url (delegate, app)")
fuzzCmd.Flags().StringP("delegate", "d", "", "if the method is scene_activity, you need to specify UISceneDelegate class")
fuzzCmd.Flags().StringP("uiapp", "u", "", "UIApplication name")
fuzzCmd.Flags().StringP("scene", "s", "", "scene class name")
fuzzCmd.Flags().UintP("runs", "r", 0, "number of runs")
fuzzCmd.Flags().UintP("timeout", "t", 1, "sleep X seconds between each case")

Expand Down
20 changes: 16 additions & 4 deletions script/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ var NSUserActivityTypeBrowsingWeb = null
var activity = null;

var ctx = null;
var ctxOpts = null;

rpc.exports = {
setup(method, appName, delegateName) {
setup(method, appName, delegateName, sceneName) {
switch (method) {
case "delegate":
if (!delegateName) {
Expand All @@ -52,11 +53,19 @@ rpc.exports = {
activity = NSUserActivity.alloc().initWithActivityType_(NSUserActivityTypeBrowsingWeb);
sceneDelegate = ObjC.Object(ObjC.chooseSync(ObjC.classes[delegateName])[0]);
shared = ObjC.Object(UIApplication.sharedApplication());
scene = ObjC.Object(ObjC.chooseSync(UIWindowScene)[0]);
if (!sceneName) {
scene = ObjC.Object(ObjC.chooseSync(ObjC.classes[scene])[0]);
} else {
scene = ObjC.Object(ObjC.chooseSync(UIWindowScene)[0]);
}
break;
case "scene_context":
sceneDelegate = ObjC.Object(ObjC.chooseSync(ObjC.classes[delegateName])[0]);
scene = ObjC.Object(ObjC.chooseSync(UIWindowScene)[0]);
if (sceneName) {
scene = ObjC.Object(ObjC.chooseSync(ObjC.classes[sceneName])[0]);
} else {
scene = ObjC.Object(ObjC.chooseSync(UIWindowScene)[0]);
}
ctx = UIOpenURLContext.alloc().init();
ctxOpts = UISceneOpenURLOptions.alloc().init();
break;
Expand All @@ -83,8 +92,11 @@ rpc.exports = {
break;
case "scene_context":
ctx.$ivars._URL = ur;
ctx.$ivars._options = ctxOpts;
var setCtx = NSSet.setWithObject_(ctx);
sceneDelegate.scene_openURLContexts_(scene, setCtx);
ObjC.schedule(ObjC.mainQueue, () => {
sceneDelegate.scene_openURLContexts_(scene, setCtx);
});
break;
default:
return "method not implemented";
Expand Down

0 comments on commit 9d10541

Please sign in to comment.