Add PA support for OPD
[auto-patcher.git] / patches / openpdroid / 4.3 / pa / 20130808 / core.patch
blob6bac630864193c09b7dc72c48fa3715c51f557fd
1 diff -Npru stock-core/smali/java/lang/PrivacyInputStream.smali pdroid-core/smali/java/lang/PrivacyInputStream.smali
2 --- stock-core/smali/java/lang/PrivacyInputStream.smali 1969-12-31 16:00:00.000000000 -0800
3 +++ pdroid-core/smali/java/lang/PrivacyInputStream.smali 2013-08-09 16:13:00.676855051 -0700
4 @@ -0,0 +1,67 @@
5 +.class public Ljava/lang/PrivacyInputStream;
6 +.super Ljava/io/InputStream;
7 +.source "PrivacyInputStream.java"
10 +# direct methods
11 +.method public constructor <init>()V
12 + .registers 1
14 + invoke-direct {p0}, Ljava/io/InputStream;-><init>()V
16 + return-void
17 +.end method
20 +# virtual methods
21 +.method public close()V
22 + .registers 1
23 + .annotation system Ldalvik/annotation/Throws;
24 + value = {
25 + Ljava/io/IOException;
26 + }
27 + .end annotation
29 + invoke-super {p0}, Ljava/io/InputStream;->close()V
31 + return-void
32 +.end method
34 +.method public read()I
35 + .registers 2
36 + .annotation system Ldalvik/annotation/Throws;
37 + value = {
38 + Ljava/io/IOException;
39 + }
40 + .end annotation
42 + const/4 v0, -0x1
44 + return v0
45 +.end method
47 +.method public read([B)I
48 + .registers 3
49 + .annotation system Ldalvik/annotation/Throws;
50 + value = {
51 + Ljava/io/IOException;
52 + }
53 + .end annotation
55 + const/4 v0, -0x1
57 + return v0
58 +.end method
60 +.method public read([BII)I
61 + .registers 5
62 + .annotation system Ldalvik/annotation/Throws;
63 + value = {
64 + Ljava/io/IOException;
65 + }
66 + .end annotation
68 + const/4 v0, -0x1
70 + return v0
71 +.end method
72 diff -Npru stock-core/smali/java/lang/PrivacyProcessManager$PrivacyFileReader.smali pdroid-core/smali/java/lang/PrivacyProcessManager$PrivacyFileReader.smali
73 --- stock-core/smali/java/lang/PrivacyProcessManager$PrivacyFileReader.smali 1969-12-31 16:00:00.000000000 -0800
74 +++ pdroid-core/smali/java/lang/PrivacyProcessManager$PrivacyFileReader.smali 2013-08-09 16:13:00.676855051 -0700
75 @@ -0,0 +1,91 @@
76 +.class public Ljava/lang/PrivacyProcessManager$PrivacyFileReader;
77 +.super Ljava/lang/Object;
78 +.source "PrivacyProcessManager.java"
81 +# annotations
82 +.annotation system Ldalvik/annotation/EnclosingClass;
83 + value = Ljava/lang/PrivacyProcessManager;
84 +.end annotation
86 +.annotation system Ldalvik/annotation/InnerClass;
87 + accessFlags = 0x9
88 + name = "PrivacyFileReader"
89 +.end annotation
92 +# instance fields
93 +.field private buffReader:Ljava/io/BufferedReader;
95 +.field private inputStream:Ljava/io/FileInputStream;
98 +# direct methods
99 +.method public constructor <init>(Ljava/lang/String;)V
100 + .registers 5
101 + .annotation system Ldalvik/annotation/Throws;
102 + value = {
103 + Ljava/io/FileNotFoundException;
105 + .end annotation
107 + invoke-direct {p0}, Ljava/lang/Object;-><init>()V
109 + new-instance v0, Ljava/io/FileInputStream;
111 + new-instance v1, Ljava/io/File;
113 + invoke-direct {v1, p1}, Ljava/io/File;-><init>(Ljava/lang/String;)V
115 + invoke-direct {v0, v1}, Ljava/io/FileInputStream;-><init>(Ljava/io/File;)V
117 + iput-object v0, p0, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->inputStream:Ljava/io/FileInputStream;
119 + new-instance v0, Ljava/io/BufferedReader;
121 + new-instance v1, Ljava/io/InputStreamReader;
123 + iget-object v2, p0, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->inputStream:Ljava/io/FileInputStream;
125 + invoke-direct {v1, v2}, Ljava/io/InputStreamReader;-><init>(Ljava/io/InputStream;)V
127 + invoke-direct {v0, v1}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
129 + iput-object v0, p0, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->buffReader:Ljava/io/BufferedReader;
131 + return-void
132 +.end method
135 +# virtual methods
136 +.method public close()V
137 + .registers 2
138 + .annotation system Ldalvik/annotation/Throws;
139 + value = {
140 + Ljava/io/IOException;
142 + .end annotation
144 + iget-object v0, p0, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->inputStream:Ljava/io/FileInputStream;
146 + invoke-virtual {v0}, Ljava/io/FileInputStream;->close()V
148 + return-void
149 +.end method
151 +.method public readLine()Ljava/lang/String;
152 + .registers 2
153 + .annotation system Ldalvik/annotation/Throws;
154 + value = {
155 + Ljava/io/IOException;
157 + .end annotation
159 + iget-object v0, p0, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->buffReader:Ljava/io/BufferedReader;
161 + invoke-virtual {v0}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
163 + move-result-object v0
165 + return-object v0
166 +.end method
167 diff -Npru stock-core/smali/java/lang/PrivacyProcessManager.smali pdroid-core/smali/java/lang/PrivacyProcessManager.smali
168 --- stock-core/smali/java/lang/PrivacyProcessManager.smali 1969-12-31 16:00:00.000000000 -0800
169 +++ pdroid-core/smali/java/lang/PrivacyProcessManager.smali 2013-08-09 16:13:00.680855052 -0700
170 @@ -0,0 +1,479 @@
171 +.class public Ljava/lang/PrivacyProcessManager;
172 +.super Ljava/lang/Object;
173 +.source "PrivacyProcessManager.java"
176 +# annotations
177 +.annotation system Ldalvik/annotation/MemberClasses;
178 + value = {
179 + Ljava/lang/PrivacyProcessManager$PrivacyFileReader;
181 +.end annotation
184 +# static fields
185 +.field private static final GET_COMMAND_WAIT_MS:I = 0xa
187 +.field private static final GET_COMMAND_WAIT_STEP:I = 0x5
190 +# direct methods
191 +.method public constructor <init>()V
192 + .registers 1
194 + invoke-direct {p0}, Ljava/lang/Object;-><init>()V
196 + return-void
197 +.end method
199 +.method private static getPackageName()Ljava/lang/String;
200 + .registers 3
201 + .annotation system Ldalvik/annotation/Throws;
202 + value = {
203 + Ljava/io/IOException;,
204 + Ljava/io/FileNotFoundException;
206 + .end annotation
208 + new-instance v0, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;
210 + const-string v2, "/proc/self/cmdline"
212 + invoke-direct {v0, v2}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;-><init>(Ljava/lang/String;)V
214 + invoke-virtual {v0}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->readLine()Ljava/lang/String;
216 + move-result-object v2
218 + invoke-virtual {v2}, Ljava/lang/String;->trim()Ljava/lang/String;
220 + move-result-object v1
222 + invoke-virtual {v0}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->close()V
224 + return-object v1
225 +.end method
227 +.method public static hasPrivacyPermission(Ljava/lang/String;)Z
228 + .registers 12
230 + const/4 v6, 0x0
232 + const/4 v5, 0x1
234 + :try_start_2
235 + invoke-static {}, Ljava/lang/PrivacyProcessManager;->getPackageName()Ljava/lang/String;
237 + move-result-object v6
239 + sget-object v8, Ljava/lang/System;->out:Ljava/io/PrintStream;
241 + new-instance v9, Ljava/lang/StringBuilder;
243 + invoke-direct {v9}, Ljava/lang/StringBuilder;-><init>()V
245 + const-string v10, "PrivacyProcessManager: got package name: "
247 + invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
249 + move-result-object v9
251 + invoke-virtual {v9, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
253 + move-result-object v9
255 + invoke-virtual {v9}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
257 + move-result-object v9
259 + invoke-virtual {v8, v9}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
260 + :try_end_1e
261 + .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_1e} :catch_57
263 + :goto_1e
264 + const/4 v2, 0x0
266 + :try_start_1f
267 + new-instance v8, Ljava/lang/StringBuilder;
269 + invoke-direct {v8}, Ljava/lang/StringBuilder;-><init>()V
271 + const-string v9, "/data/system/privacy/"
273 + invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
275 + move-result-object v8
277 + invoke-virtual {v8, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
279 + move-result-object v8
281 + const-string v9, "/"
283 + invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
285 + move-result-object v8
287 + invoke-virtual {v8, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
289 + move-result-object v8
291 + invoke-virtual {v8}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
293 + move-result-object v7
295 + new-instance v3, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;
297 + invoke-direct {v3, v7}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;-><init>(Ljava/lang/String;)V
298 + :try_end_41
299 + .catch Ljava/io/FileNotFoundException; {:try_start_1f .. :try_end_41} :catch_85
300 + .catch Ljava/lang/Exception; {:try_start_1f .. :try_end_41} :catch_65
302 + :try_start_41
303 + invoke-virtual {v3}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->readLine()Ljava/lang/String;
305 + move-result-object v4
307 + if-eqz v4, :cond_63
309 + invoke-virtual {v4}, Ljava/lang/String;->trim()Ljava/lang/String;
311 + move-result-object v8
313 + invoke-static {v8}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
315 + move-result v0
317 + :goto_4f
318 + invoke-virtual {v3}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->close()V
319 + :try_end_52
320 + .catch Ljava/io/FileNotFoundException; {:try_start_41 .. :try_end_52} :catch_87
321 + .catch Ljava/lang/Exception; {:try_start_41 .. :try_end_52} :catch_82
323 + const/4 v8, 0x1
325 + if-ne v0, v8, :cond_56
327 + const/4 v5, 0x0
329 + :cond_56
330 + :goto_56
331 + return v5
333 + :catch_57
334 + move-exception v1
336 + sget-object v8, Ljava/lang/System;->err:Ljava/io/PrintStream;
338 + const-string v9, "PrivacyProcessManager: could not find package name"
340 + invoke-virtual {v8, v9}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
342 + invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V
344 + goto :goto_1e
346 + :cond_63
347 + const/4 v0, -0x1
349 + goto :goto_4f
351 + :catch_65
352 + move-exception v1
354 + :goto_66
355 + sget-object v8, Ljava/lang/System;->err:Ljava/io/PrintStream;
357 + new-instance v9, Ljava/lang/StringBuilder;
359 + invoke-direct {v9}, Ljava/lang/StringBuilder;-><init>()V
361 + const-string v10, "PrivacyProcessManager: could not read privacy settings: "
363 + invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
365 + move-result-object v9
367 + invoke-virtual {v9, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
369 + move-result-object v9
371 + invoke-virtual {v9}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
373 + move-result-object v9
375 + invoke-virtual {v8, v9}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
377 + invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V
379 + goto :goto_56
381 + :catch_82
382 + move-exception v1
384 + move-object v2, v3
386 + goto :goto_66
388 + :catch_85
389 + move-exception v8
391 + goto :goto_56
393 + :catch_87
394 + move-exception v8
396 + move-object v2, v3
398 + goto :goto_56
399 +.end method
401 +.method public static hasPrivacyPermission(Ljava/lang/String;I)Z
402 + .registers 16
404 + const/4 v7, 0x0
406 + const/4 v6, 0x1
408 + :try_start_2
409 + invoke-static {}, Ljava/lang/PrivacyProcessManager;->getPackageName()Ljava/lang/String;
410 + :try_end_5
411 + .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_5} :catch_39
413 + move-result-object v7
415 + :goto_6
416 + const/4 v2, 0x0
418 + :try_start_7
419 + new-instance v11, Ljava/lang/StringBuilder;
421 + invoke-direct {v11}, Ljava/lang/StringBuilder;-><init>()V
423 + const-string v12, "/proc/"
425 + invoke-virtual {v11, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
427 + move-result-object v11
429 + invoke-virtual {v11, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
431 + move-result-object v11
433 + const-string v12, "/cmdline"
435 + invoke-virtual {v11, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
437 + move-result-object v11
439 + invoke-virtual {v11}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
441 + move-result-object v0
443 + new-instance v3, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;
445 + invoke-direct {v3, v0}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;-><init>(Ljava/lang/String;)V
446 + :try_end_25
447 + .catch Ljava/io/FileNotFoundException; {:try_start_7 .. :try_end_25} :catch_b9
448 + .catch Ljava/lang/Exception; {:try_start_7 .. :try_end_25} :catch_97
450 + :try_start_25
451 + const-string v8, ""
453 + const/16 v4, 0xa
455 + :goto_29
456 + invoke-virtual {v3}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->readLine()Ljava/lang/String;
457 + :try_end_2c
458 + .catch Ljava/io/FileNotFoundException; {:try_start_25 .. :try_end_2c} :catch_bb
459 + .catch Ljava/lang/Exception; {:try_start_25 .. :try_end_2c} :catch_b6
461 + move-result-object v8
463 + if-nez v8, :cond_45
465 + if-ltz v4, :cond_45
467 + const-wide/16 v11, 0x5
469 + :try_start_33
470 + invoke-static {v11, v12}, Ljava/lang/Thread;->sleep(J)V
471 + :try_end_36
472 + .catch Ljava/lang/InterruptedException; {:try_start_33 .. :try_end_36} :catch_b4
473 + .catch Ljava/io/FileNotFoundException; {:try_start_33 .. :try_end_36} :catch_bb
474 + .catch Ljava/lang/Exception; {:try_start_33 .. :try_end_36} :catch_b6
476 + :goto_36
477 + add-int/lit8 v4, v4, -0x5
479 + goto :goto_29
481 + :catch_39
482 + move-exception v1
484 + sget-object v11, Ljava/lang/System;->err:Ljava/io/PrintStream;
486 + const-string v12, "PrivacyProcessManager: could not find package name or UID"
488 + invoke-virtual {v11, v12}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
490 + invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V
492 + goto :goto_6
494 + :cond_45
495 + :try_start_45
496 + invoke-virtual {v3}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->close()V
498 + if-eqz v8, :cond_be
500 + invoke-virtual {v8}, Ljava/lang/String;->trim()Ljava/lang/String;
502 + move-result-object v11
504 + invoke-virtual {v11}, Ljava/lang/String;->length()I
506 + move-result v11
508 + const/4 v12, 0x5
510 + if-le v11, v12, :cond_be
512 + const-string v11, "logcat"
514 + invoke-virtual {v8, v11}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
516 + move-result v11
518 + if-eqz v11, :cond_be
520 + new-instance v11, Ljava/lang/StringBuilder;
522 + invoke-direct {v11}, Ljava/lang/StringBuilder;-><init>()V
524 + const-string v12, "/data/system/privacy/"
526 + invoke-virtual {v11, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
528 + move-result-object v11
530 + invoke-virtual {v11, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
532 + move-result-object v11
534 + const-string v12, "/"
536 + invoke-virtual {v11, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
538 + move-result-object v11
540 + invoke-virtual {v11, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
542 + move-result-object v11
544 + invoke-virtual {v11}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
546 + move-result-object v9
548 + new-instance v2, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;
550 + invoke-direct {v2, v9}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;-><init>(Ljava/lang/String;)V
551 + :try_end_7f
552 + .catch Ljava/io/FileNotFoundException; {:try_start_45 .. :try_end_7f} :catch_bb
553 + .catch Ljava/lang/Exception; {:try_start_45 .. :try_end_7f} :catch_b6
555 + :try_start_7f
556 + invoke-virtual {v2}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->readLine()Ljava/lang/String;
558 + move-result-object v5
560 + if-eqz v5, :cond_95
562 + invoke-virtual {v5}, Ljava/lang/String;->trim()Ljava/lang/String;
564 + move-result-object v11
566 + invoke-static {v11}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
568 + move-result v10
570 + :goto_8d
571 + invoke-virtual {v2}, Ljava/lang/PrivacyProcessManager$PrivacyFileReader;->close()V
572 + :try_end_90
573 + .catch Ljava/io/FileNotFoundException; {:try_start_7f .. :try_end_90} :catch_b9
574 + .catch Ljava/lang/Exception; {:try_start_7f .. :try_end_90} :catch_97
576 + const/4 v11, 0x1
578 + if-ne v10, v11, :cond_94
580 + const/4 v6, 0x0
582 + :cond_94
583 + :goto_94
584 + return v6
586 + :cond_95
587 + const/4 v10, -0x1
589 + goto :goto_8d
591 + :catch_97
592 + move-exception v1
594 + :goto_98
595 + sget-object v11, Ljava/lang/System;->err:Ljava/io/PrintStream;
597 + new-instance v12, Ljava/lang/StringBuilder;
599 + invoke-direct {v12}, Ljava/lang/StringBuilder;-><init>()V
601 + const-string v13, "PrivacyProcessManager: could not read privacy settings: "
603 + invoke-virtual {v12, v13}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
605 + move-result-object v12
607 + invoke-virtual {v12, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
609 + move-result-object v12
611 + invoke-virtual {v12}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
613 + move-result-object v12
615 + invoke-virtual {v11, v12}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
617 + invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V
619 + goto :goto_94
621 + :catch_b4
622 + move-exception v11
624 + goto :goto_36
626 + :catch_b6
627 + move-exception v1
629 + move-object v2, v3
631 + goto :goto_98
633 + :catch_b9
634 + move-exception v11
636 + goto :goto_94
638 + :catch_bb
639 + move-exception v11
641 + move-object v2, v3
643 + goto :goto_94
645 + :cond_be
646 + move-object v2, v3
648 + goto :goto_94
649 +.end method
650 diff -Npru stock-core/smali/java/lang/ProcessManager$ProcessImpl.smali pdroid-core/smali/java/lang/ProcessManager$ProcessImpl.smali
651 --- stock-core/smali/java/lang/ProcessManager$ProcessImpl.smali 2013-08-09 16:13:03.692855177 -0700
652 +++ pdroid-core/smali/java/lang/ProcessManager$ProcessImpl.smali 2013-08-09 16:13:00.688855052 -0700
653 @@ -21,6 +21,8 @@
655 .field private final exitValueMutex:Ljava/lang/Object;
657 +.field private fakeProcess:Z
659 .field private final inputStream:Ljava/io/InputStream;
661 .field private final outputStream:Ljava/io/OutputStream;
662 @@ -36,6 +38,70 @@
664 invoke-direct {p0}, Ljava/lang/Process;-><init>()V
666 + const/4 v0, 0x0
668 + iput-boolean v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->fakeProcess:Z
670 + iput-object v1, p0, Ljava/lang/ProcessManager$ProcessImpl;->exitValue:Ljava/lang/Integer;
672 + new-instance v0, Ljava/lang/Object;
674 + invoke-direct {v0}, Ljava/lang/Object;-><init>()V
676 + iput-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->exitValueMutex:Ljava/lang/Object;
678 + iput p1, p0, Ljava/lang/ProcessManager$ProcessImpl;->pid:I
680 + new-instance v0, Ljava/lang/ProcessManager$ProcessInputStream;
682 + invoke-direct {v0, p4, v1}, Ljava/lang/ProcessManager$ProcessInputStream;-><init>(Ljava/io/FileDescriptor;Ljava/lang/ProcessManager$1;)V
684 + iput-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->errorStream:Ljava/io/InputStream;
686 + const-string v0, "systemLogsSetting"
688 + invoke-static {v0, p1}, Ljava/lang/PrivacyProcessManager;->hasPrivacyPermission(Ljava/lang/String;I)Z
690 + move-result v0
692 + if-eqz v0, :cond_30
694 + new-instance v0, Ljava/lang/ProcessManager$ProcessInputStream;
696 + invoke-direct {v0, p2, v1}, Ljava/lang/ProcessManager$ProcessInputStream;-><init>(Ljava/io/FileDescriptor;Ljava/lang/ProcessManager$1;)V
698 + iput-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->inputStream:Ljava/io/InputStream;
700 + :goto_28
701 + new-instance v0, Ljava/lang/ProcessManager$ProcessOutputStream;
703 + invoke-direct {v0, p3, v1}, Ljava/lang/ProcessManager$ProcessOutputStream;-><init>(Ljava/io/FileDescriptor;Ljava/lang/ProcessManager$1;)V
705 + iput-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->outputStream:Ljava/io/OutputStream;
707 + return-void
709 + :cond_30
710 + new-instance v0, Ljava/lang/PrivacyInputStream;
712 + invoke-direct {v0}, Ljava/lang/PrivacyInputStream;-><init>()V
714 + iput-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->inputStream:Ljava/io/InputStream;
716 + goto :goto_28
717 +.end method
719 +.method constructor <init>(ILjava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Z)V
720 + .registers 8
722 + const/4 v1, 0x0
724 + invoke-direct {p0}, Ljava/lang/Process;-><init>()V
726 + const/4 v0, 0x0
728 + iput-boolean v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->fakeProcess:Z
730 iput-object v1, p0, Ljava/lang/ProcessManager$ProcessImpl;->exitValue:Ljava/lang/Integer;
732 new-instance v0, Ljava/lang/Object;
733 @@ -52,12 +118,15 @@
735 iput-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->errorStream:Ljava/io/InputStream;
737 + if-eqz p5, :cond_2a
739 new-instance v0, Ljava/lang/ProcessManager$ProcessInputStream;
741 invoke-direct {v0, p2, v1}, Ljava/lang/ProcessManager$ProcessInputStream;-><init>(Ljava/io/FileDescriptor;Ljava/lang/ProcessManager$1;)V
743 iput-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->inputStream:Ljava/io/InputStream;
745 + :goto_22
746 new-instance v0, Ljava/lang/ProcessManager$ProcessOutputStream;
748 invoke-direct {v0, p3, v1}, Ljava/lang/ProcessManager$ProcessOutputStream;-><init>(Ljava/io/FileDescriptor;Ljava/lang/ProcessManager$1;)V
749 @@ -65,6 +134,19 @@
750 iput-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->outputStream:Ljava/io/OutputStream;
752 return-void
754 + :cond_2a
755 + new-instance v0, Ljava/lang/PrivacyInputStream;
757 + invoke-direct {v0}, Ljava/lang/PrivacyInputStream;-><init>()V
759 + iput-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->inputStream:Ljava/io/InputStream;
761 + const/4 v0, 0x1
763 + iput-boolean v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->fakeProcess:Z
765 + goto :goto_22
766 .end method
768 .method static synthetic access$300(Ljava/lang/ProcessManager$ProcessImpl;)I
769 @@ -86,12 +168,17 @@
771 :try_start_3
772 iget-object v1, p0, Ljava/lang/ProcessManager$ProcessImpl;->exitValue:Ljava/lang/Integer;
773 - :try_end_5
774 - .catchall {:try_start_3 .. :try_end_5} :catchall_3b
776 - if-nez v1, :cond_10
777 + if-eqz v1, :cond_b
779 + iget-boolean v1, p0, Ljava/lang/ProcessManager$ProcessImpl;->fakeProcess:Z
780 + :try_end_9
781 + .catchall {:try_start_3 .. :try_end_9} :catchall_3f
783 - :try_start_7
784 + if-eqz v1, :cond_14
786 + :cond_b
787 + :try_start_b
788 sget-object v1, Llibcore/io/Libcore;->os:Llibcore/io/Os;
790 iget v3, p0, Ljava/lang/ProcessManager$ProcessImpl;->pid:I
791 @@ -99,16 +186,16 @@
792 sget v4, Llibcore/io/OsConstants;->SIGKILL:I
794 invoke-interface {v1, v3, v4}, Llibcore/io/Os;->kill(II)V
795 - :try_end_10
796 - .catchall {:try_start_7 .. :try_end_10} :catchall_3b
797 - .catch Llibcore/io/ErrnoException; {:try_start_7 .. :try_end_10} :catch_21
799 - :cond_10
800 - :goto_10
801 - :try_start_10
802 + :try_end_14
803 + .catchall {:try_start_b .. :try_end_14} :catchall_3f
804 + .catch Llibcore/io/ErrnoException; {:try_start_b .. :try_end_14} :catch_25
806 + :cond_14
807 + :goto_14
808 + :try_start_14
809 monitor-exit v2
810 - :try_end_11
811 - .catchall {:try_start_10 .. :try_end_11} :catchall_3b
812 + :try_end_15
813 + .catchall {:try_start_14 .. :try_end_15} :catchall_3f
815 iget-object v1, p0, Ljava/lang/ProcessManager$ProcessImpl;->inputStream:Ljava/io/InputStream;
817 @@ -124,10 +211,10 @@
819 return-void
821 - :catch_21
822 + :catch_25
823 move-exception v0
825 - :try_start_22
826 + :try_start_26
827 new-instance v1, Ljava/lang/StringBuilder;
829 invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
830 @@ -150,14 +237,14 @@
832 invoke-static {v1, v0}, Ljava/lang/System;->logI(Ljava/lang/String;Ljava/lang/Throwable;)V
834 - goto :goto_10
835 + goto :goto_14
837 - :catchall_3b
838 + :catchall_3f
839 move-exception v1
841 monitor-exit v2
842 - :try_end_3d
843 - .catchall {:try_start_22 .. :try_end_3d} :catchall_3b
844 + :try_end_41
845 + .catchall {:try_start_26 .. :try_end_41} :catchall_3f
847 throw v1
848 .end method
849 @@ -165,14 +252,23 @@
850 .method public exitValue()I
851 .registers 5
853 + iget-boolean v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->fakeProcess:Z
855 + if-eqz v0, :cond_8
857 + const/4 v0, 0x0
859 + invoke-virtual {p0, v0}, Ljava/lang/ProcessManager$ProcessImpl;->setExitValue(I)V
861 + :cond_8
862 iget-object v1, p0, Ljava/lang/ProcessManager$ProcessImpl;->exitValueMutex:Ljava/lang/Object;
864 monitor-enter v1
866 - :try_start_3
867 + :try_start_b
868 iget-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->exitValue:Ljava/lang/Integer;
870 - if-nez v0, :cond_25
871 + if-nez v0, :cond_2d
873 new-instance v0, Ljava/lang/IllegalThreadStateException;
875 @@ -200,17 +296,17 @@
877 throw v0
879 - :catchall_22
880 + :catchall_2a
881 move-exception v0
883 monitor-exit v1
884 - :try_end_24
885 - .catchall {:try_start_3 .. :try_end_24} :catchall_22
886 + :try_end_2c
887 + .catchall {:try_start_b .. :try_end_2c} :catchall_2a
889 throw v0
891 - :cond_25
892 - :try_start_25
893 + :cond_2d
894 + :try_start_2d
895 iget-object v0, p0, Ljava/lang/ProcessManager$ProcessImpl;->exitValue:Ljava/lang/Integer;
897 invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I
898 @@ -218,8 +314,8 @@
899 move-result v0
901 monitor-exit v1
902 - :try_end_2c
903 - .catchall {:try_start_25 .. :try_end_2c} :catchall_22
904 + :try_end_34
905 + .catchall {:try_start_2d .. :try_end_34} :catchall_2a
907 return v0
908 .end method
909 diff -Npru stock-core/smali/java/lang/ProcessManager.smali pdroid-core/smali/java/lang/ProcessManager.smali
910 --- stock-core/smali/java/lang/ProcessManager.smali 2013-08-09 16:13:03.700855177 -0700
911 +++ pdroid-core/smali/java/lang/ProcessManager.smali 2013-08-09 16:13:00.692855052 -0700
912 @@ -136,6 +136,155 @@
913 return-void
914 .end method
916 +.method private containsIpTableCommand(Ljava/lang/String;)Z
917 + .registers 10
919 + const/4 v5, 0x0
921 + :try_start_1
922 + sget-object v6, Ljava/lang/System;->out:Ljava/io/PrintStream;
924 + const-string v7, "now we\'re in containsIpTableCommand"
926 + invoke-virtual {v6, v7}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
928 + new-instance v3, Ljava/io/FileInputStream;
930 + invoke-direct {v3, p1}, Ljava/io/FileInputStream;-><init>(Ljava/lang/String;)V
932 + new-instance v1, Ljava/io/DataInputStream;
934 + invoke-direct {v1, v3}, Ljava/io/DataInputStream;-><init>(Ljava/io/InputStream;)V
936 + new-instance v0, Ljava/io/BufferedReader;
938 + new-instance v6, Ljava/io/InputStreamReader;
940 + invoke-direct {v6, v1}, Ljava/io/InputStreamReader;-><init>(Ljava/io/InputStream;)V
942 + invoke-direct {v0, v6}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
944 + :cond_1c
945 + invoke-virtual {v0}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
947 + move-result-object v4
949 + if-eqz v4, :cond_6a
951 + const-string v6, "iptables"
953 + invoke-virtual {v4, v6}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
955 + move-result v6
957 + if-nez v6, :cond_32
959 + const-string v6, "ip6tables"
961 + invoke-virtual {v4, v6}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
962 + :try_end_2f
963 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_2f} :catch_59
965 + move-result v6
967 + if-eqz v6, :cond_1c
969 + :cond_32
970 + :try_start_32
971 + invoke-virtual {v1}, Ljava/io/DataInputStream;->close()V
973 + invoke-virtual {v0}, Ljava/io/BufferedReader;->close()V
975 + invoke-virtual {v3}, Ljava/io/FileInputStream;->close()V
976 + :try_end_3b
977 + .catchall {:try_start_32 .. :try_end_3b} :catchall_62
978 + .catch Ljava/io/IOException; {:try_start_32 .. :try_end_3b} :catch_4a
980 + const/4 v3, 0x0
982 + const/4 v1, 0x0
984 + const/4 v0, 0x0
986 + :try_start_3e
987 + invoke-static {}, Ljava/lang/System;->gc()V
989 + :goto_41
990 + sget-object v6, Ljava/lang/System;->out:Ljava/io/PrintStream;
992 + const-string v7, "returning true, file contains iptable command"
994 + invoke-virtual {v6, v7}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
995 + :try_end_48
996 + .catch Ljava/lang/Exception; {:try_start_3e .. :try_end_48} :catch_59
998 + const/4 v5, 0x1
1000 + :goto_49
1001 + return v5
1003 + :catch_4a
1004 + move-exception v2
1006 + :try_start_4b
1007 + sget-object v6, Ljava/lang/System;->out:Ljava/io/PrintStream;
1009 + const-string v7, "got exception while closing streams"
1011 + invoke-virtual {v6, v7}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
1012 + :try_end_52
1013 + .catchall {:try_start_4b .. :try_end_52} :catchall_62
1015 + const/4 v3, 0x0
1017 + const/4 v1, 0x0
1019 + const/4 v0, 0x0
1021 + :try_start_55
1022 + invoke-static {}, Ljava/lang/System;->gc()V
1023 + :try_end_58
1024 + .catch Ljava/lang/Exception; {:try_start_55 .. :try_end_58} :catch_59
1026 + goto :goto_41
1028 + :catch_59
1029 + move-exception v2
1031 + sget-object v6, Ljava/lang/System;->out:Ljava/io/PrintStream;
1033 + const-string v7, "returning false,because we got exception while parsing"
1035 + invoke-virtual {v6, v7}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
1037 + goto :goto_49
1039 + :catchall_62
1040 + move-exception v6
1042 + const/4 v3, 0x0
1044 + const/4 v1, 0x0
1046 + const/4 v0, 0x0
1048 + :try_start_66
1049 + invoke-static {}, Ljava/lang/System;->gc()V
1051 + throw v6
1053 + :cond_6a
1054 + sget-object v6, Ljava/lang/System;->out:Ljava/io/PrintStream;
1056 + const-string v7, "returning false, file doesn\'t contains iptable command"
1058 + invoke-virtual {v6, v7}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
1059 + :try_end_71
1060 + .catch Ljava/lang/Exception; {:try_start_66 .. :try_end_71} :catch_59
1062 + goto :goto_49
1063 +.end method
1065 .method private static native exec([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Z)I
1066 .annotation system Ldalvik/annotation/Throws;
1067 value = {
1068 @@ -393,157 +542,418 @@
1070 # virtual methods
1071 .method public exec([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;Z)Ljava/lang/Process;
1072 - .registers 21
1073 + .registers 24
1074 .annotation system Ldalvik/annotation/Throws;
1075 value = {
1076 Ljava/io/IOException;
1078 .end annotation
1080 - if-nez p1, :cond_a
1081 + const/4 v15, 0x1
1083 + if-eqz p1, :cond_30
1085 + const/4 v14, 0x0
1087 + :goto_4
1088 + move-object/from16 v0, p1
1090 + array-length v9, v0
1092 + if-ge v14, v9, :cond_30
1094 + sget-object v9, Ljava/lang/System;->out:Ljava/io/PrintStream;
1096 + new-instance v10, Ljava/lang/StringBuilder;
1098 + invoke-direct {v10}, Ljava/lang/StringBuilder;-><init>()V
1100 + const-string v11, "tainted command part "
1102 + invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1104 + move-result-object v10
1106 + invoke-virtual {v10, v14}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
1108 + move-result-object v10
1110 + const-string v11, ": "
1112 + invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1114 - new-instance v7, Ljava/lang/NullPointerException;
1115 + move-result-object v10
1117 - const-string v14, "taintedCommand == null"
1118 + aget-object v11, p1, v14
1120 - invoke-direct {v7, v14}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
1121 + invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1123 - throw v7
1124 + move-result-object v10
1126 + invoke-virtual {v10}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
1128 + move-result-object v10
1130 + invoke-virtual {v9, v10}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
1132 + add-int/lit8 v14, v14, 0x1
1134 + goto :goto_4
1136 + :cond_30
1137 + if-eqz p1, :cond_aa
1139 - :cond_a
1140 move-object/from16 v0, p1
1142 - array-length v7, v0
1143 + array-length v9, v0
1145 + if-lez v9, :cond_aa
1147 - if-nez v7, :cond_17
1148 + const/4 v9, 0x0
1150 + aget-object v9, p1, v9
1152 + const-string v10, "su"
1154 + invoke-virtual {v9, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
1156 - new-instance v7, Ljava/lang/IndexOutOfBoundsException;
1157 + move-result v9
1159 + if-nez v9, :cond_63
1161 + const/4 v9, 0x0
1163 - const-string v14, "taintedCommand.length == 0"
1164 + aget-object v9, p1, v9
1166 + const-string v10, "sh"
1168 + invoke-virtual {v9, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
1170 + move-result v9
1172 + if-nez v9, :cond_63
1174 + const/4 v9, 0x0
1176 + aget-object v9, p1, v9
1178 + const-string v10, "bash"
1180 + invoke-virtual {v9, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
1182 + move-result v9
1184 + if-nez v9, :cond_63
1186 + const/4 v9, 0x0
1188 - invoke-direct {v7, v14}, Ljava/lang/IndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
1189 + aget-object v9, p1, v9
1191 - throw v7
1192 + const-string v10, "rbash"
1194 - :cond_17
1195 + invoke-virtual {v9, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
1197 + move-result v9
1199 + if-eqz v9, :cond_aa
1201 + :cond_63
1202 + const/4 v14, 0x0
1204 + :goto_64
1205 + move-object/from16 v0, p1
1207 + array-length v9, v0
1209 + if-ge v14, v9, :cond_aa
1211 + sget-object v9, Ljava/lang/System;->out:Ljava/io/PrintStream;
1213 + new-instance v10, Ljava/lang/StringBuilder;
1215 + invoke-direct {v10}, Ljava/lang/StringBuilder;-><init>()V
1217 + const-string v11, "Now test tainted command: "
1219 + invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1221 + move-result-object v10
1223 + aget-object v11, p1, v14
1225 + invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1227 + move-result-object v10
1229 + invoke-virtual {v10}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
1231 + move-result-object v10
1233 + invoke-virtual {v9, v10}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
1235 + aget-object v9, p1, v14
1237 + const-string v10, ".sh"
1239 + invoke-virtual {v9, v10}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
1241 + move-result v9
1243 + if-nez v9, :cond_97
1245 + aget-object v9, p1, v14
1247 + const-string v10, "/"
1249 + invoke-virtual {v9, v10}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
1251 + move-result v9
1253 + if-eqz v9, :cond_eb
1255 + :cond_97
1256 + aget-object v9, p1, v14
1258 + move-object/from16 v0, p0
1260 + invoke-direct {v0, v9}, Ljava/lang/ProcessManager;->containsIpTableCommand(Ljava/lang/String;)Z
1262 + move-result v9
1264 + if-eqz v9, :cond_eb
1266 + const-string v9, "ipTableProtectSetting"
1268 + invoke-static {v9}, Ljava/lang/PrivacyProcessManager;->hasPrivacyPermission(Ljava/lang/String;)Z
1270 + move-result v9
1272 + if-nez v9, :cond_eb
1274 + const/4 v15, 0x0
1276 + :cond_aa
1277 + if-eqz p1, :cond_d5
1279 + move-object/from16 v0, p1
1281 + array-length v9, v0
1283 + if-lez v9, :cond_d5
1285 + if-eqz v15, :cond_d5
1287 + const/4 v14, 0x0
1289 + :goto_b4
1290 + move-object/from16 v0, p1
1292 + array-length v9, v0
1294 + if-ge v14, v9, :cond_d5
1296 + aget-object v9, p1, v14
1298 + const-string v10, "iptables"
1300 + invoke-virtual {v9, v10}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
1302 + move-result v9
1304 + if-nez v9, :cond_cd
1306 + aget-object v9, p1, v14
1308 + const-string v10, "ip6tables"
1310 + invoke-virtual {v9, v10}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
1312 + move-result v9
1314 + if-eqz v9, :cond_f0
1316 + :cond_cd
1317 + const-string v9, "ipTableProtectSetting"
1319 + invoke-static {v9}, Ljava/lang/PrivacyProcessManager;->hasPrivacyPermission(Ljava/lang/String;)Z
1321 + move-result v9
1323 + if-eqz v9, :cond_ef
1325 + :cond_d5
1326 + if-nez v15, :cond_e1
1328 + const/4 v9, 0x1
1330 + new-array v0, v9, [Ljava/lang/String;
1332 + move-object/from16 p1, v0
1334 + const/4 v9, 0x0
1336 + const-string v10, "su"
1338 + aput-object v10, p1, v9
1340 + :cond_e1
1341 + if-nez p1, :cond_f3
1343 + new-instance v9, Ljava/lang/NullPointerException;
1345 + const-string v10, "taintedCommand == null"
1347 + invoke-direct {v9, v10}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
1349 + throw v9
1351 + :cond_eb
1352 + add-int/lit8 v14, v14, 0x1
1354 + goto/16 :goto_64
1356 + :cond_ef
1357 + const/4 v15, 0x0
1359 + :cond_f0
1360 + add-int/lit8 v14, v14, 0x1
1362 + goto :goto_b4
1364 + :cond_f3
1365 + move-object/from16 v0, p1
1367 + array-length v9, v0
1369 + if-nez v9, :cond_100
1371 + new-instance v9, Ljava/lang/IndexOutOfBoundsException;
1373 + const-string v10, "taintedCommand.length == 0"
1375 + invoke-direct {v9, v10}, Ljava/lang/IndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
1377 + throw v9
1379 + :cond_100
1380 invoke-virtual/range {p1 .. p1}, [Ljava/lang/String;->clone()Ljava/lang/Object;
1382 move-result-object v1
1384 check-cast v1, [Ljava/lang/String;
1386 - if-eqz p2, :cond_4d
1387 + if-eqz p2, :cond_136
1389 invoke-virtual/range {p2 .. p2}, [Ljava/lang/String;->clone()Ljava/lang/Object;
1391 - move-result-object v7
1392 + move-result-object v9
1394 - check-cast v7, [Ljava/lang/String;
1395 + check-cast v9, [Ljava/lang/String;
1397 - move-object v2, v7
1398 + move-object v2, v9
1400 - :goto_26
1401 - const/4 v9, 0x0
1402 + :goto_10f
1403 + const/4 v14, 0x0
1405 - :goto_27
1406 - array-length v7, v1
1407 + :goto_110
1408 + array-length v9, v1
1410 - if-ge v9, v7, :cond_52
1411 + if-ge v14, v9, :cond_13b
1413 - aget-object v7, v1, v9
1414 + aget-object v9, v1, v14
1416 - if-nez v7, :cond_4f
1417 + if-nez v9, :cond_138
1419 - new-instance v7, Ljava/lang/NullPointerException;
1420 + new-instance v9, Ljava/lang/NullPointerException;
1422 - new-instance v14, Ljava/lang/StringBuilder;
1423 + new-instance v10, Ljava/lang/StringBuilder;
1425 - invoke-direct {v14}, Ljava/lang/StringBuilder;-><init>()V
1426 + invoke-direct {v10}, Ljava/lang/StringBuilder;-><init>()V
1428 - const-string v15, "taintedCommand["
1429 + const-string v11, "taintedCommand["
1431 - invoke-virtual {v14, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1432 + invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1434 - move-result-object v14
1435 + move-result-object v10
1437 - invoke-virtual {v14, v9}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
1438 + invoke-virtual {v10, v14}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
1440 - move-result-object v14
1441 + move-result-object v10
1443 - const-string v15, "] == null"
1444 + const-string v11, "] == null"
1446 - invoke-virtual {v14, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1447 + invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1449 - move-result-object v14
1450 + move-result-object v10
1452 - invoke-virtual {v14}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
1453 + invoke-virtual {v10}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
1455 - move-result-object v14
1456 + move-result-object v10
1458 - invoke-direct {v7, v14}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
1459 + invoke-direct {v9, v10}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
1461 - throw v7
1462 + throw v9
1464 - :cond_4d
1465 + :cond_136
1466 const/4 v2, 0x0
1468 - goto :goto_26
1469 + goto :goto_10f
1471 - :cond_4f
1472 - add-int/lit8 v9, v9, 0x1
1473 + :cond_138
1474 + add-int/lit8 v14, v14, 0x1
1476 - goto :goto_27
1477 + goto :goto_110
1479 - :cond_52
1480 - if-eqz v2, :cond_7e
1481 + :cond_13b
1482 + if-eqz v2, :cond_167
1484 - const/4 v9, 0x0
1485 + const/4 v14, 0x0
1487 - :goto_55
1488 - array-length v7, v2
1489 + :goto_13e
1490 + array-length v9, v2
1492 - if-ge v9, v7, :cond_7e
1493 + if-ge v14, v9, :cond_167
1495 - aget-object v7, v2, v9
1496 + aget-object v9, v2, v14
1498 - if-nez v7, :cond_7b
1499 + if-nez v9, :cond_164
1501 - new-instance v7, Ljava/lang/NullPointerException;
1502 + new-instance v9, Ljava/lang/NullPointerException;
1504 - new-instance v14, Ljava/lang/StringBuilder;
1505 + new-instance v10, Ljava/lang/StringBuilder;
1507 - invoke-direct {v14}, Ljava/lang/StringBuilder;-><init>()V
1508 + invoke-direct {v10}, Ljava/lang/StringBuilder;-><init>()V
1510 - const-string v15, "taintedEnvironment["
1511 + const-string v11, "taintedEnvironment["
1513 - invoke-virtual {v14, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1514 + invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1516 - move-result-object v14
1517 + move-result-object v10
1519 - invoke-virtual {v14, v9}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
1520 + invoke-virtual {v10, v14}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
1522 - move-result-object v14
1523 + move-result-object v10
1525 - const-string v15, "] == null"
1526 + const-string v11, "] == null"
1528 - invoke-virtual {v14, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1529 + invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1531 - move-result-object v14
1532 + move-result-object v10
1534 - invoke-virtual {v14}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
1535 + invoke-virtual {v10}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
1537 - move-result-object v14
1538 + move-result-object v10
1540 - invoke-direct {v7, v14}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
1541 + invoke-direct {v9, v10}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
1543 - throw v7
1544 + throw v9
1546 - :cond_7b
1547 - add-int/lit8 v9, v9, 0x1
1548 + :cond_164
1549 + add-int/lit8 v14, v14, 0x1
1551 - goto :goto_55
1552 + goto :goto_13e
1554 - :cond_7e
1555 + :cond_167
1556 new-instance v4, Ljava/io/FileDescriptor;
1558 invoke-direct {v4}, Ljava/io/FileDescriptor;-><init>()V
1559 @@ -556,135 +966,166 @@
1561 invoke-direct {v6}, Ljava/io/FileDescriptor;-><init>()V
1563 - if-nez p3, :cond_bd
1564 + if-nez p3, :cond_1ae
1566 const/4 v3, 0x0
1568 - :goto_90
1569 + :goto_179
1570 move-object/from16 v0, p0
1572 - iget-object v14, v0, Ljava/lang/ProcessManager;->processReferences:Ljava/util/Map;
1573 + iget-object v0, v0, Ljava/lang/ProcessManager;->processReferences:Ljava/util/Map;
1575 - monitor-enter v14
1576 + move-object/from16 v18, v0
1578 + monitor-enter v18
1580 move/from16 v7, p4
1582 - :try_start_97
1583 + :try_start_182
1584 invoke-static/range {v1 .. v7}, Ljava/lang/ProcessManager;->exec([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Z)I
1585 - :try_end_9a
1586 - .catchall {:try_start_97 .. :try_end_9a} :catchall_fd
1587 - .catch Ljava/io/IOException; {:try_start_97 .. :try_end_9a} :catch_c2
1588 + :try_end_185
1589 + .catchall {:try_start_182 .. :try_end_185} :catchall_1f2
1590 + .catch Ljava/io/IOException; {:try_start_182 .. :try_end_185} :catch_1b3
1592 + move-result v8
1594 - move-result v10
1595 + if-eqz v15, :cond_1f5
1597 - :try_start_9b
1598 - new-instance v11, Ljava/lang/ProcessManager$ProcessImpl;
1599 + :try_start_188
1600 + new-instance v7, Ljava/lang/ProcessManager$ProcessImpl;
1602 - invoke-direct {v11, v10, v4, v5, v6}, Ljava/lang/ProcessManager$ProcessImpl;-><init>(ILjava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;)V
1603 + invoke-direct {v7, v8, v4, v5, v6}, Ljava/lang/ProcessManager$ProcessImpl;-><init>(ILjava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;)V
1605 - new-instance v12, Ljava/lang/ProcessManager$ProcessReference;
1606 + :goto_18d
1607 + new-instance v16, Ljava/lang/ProcessManager$ProcessReference;
1609 move-object/from16 v0, p0
1611 - iget-object v7, v0, Ljava/lang/ProcessManager;->referenceQueue:Ljava/lang/ProcessManager$ProcessReferenceQueue;
1612 + iget-object v9, v0, Ljava/lang/ProcessManager;->referenceQueue:Ljava/lang/ProcessManager$ProcessReferenceQueue;
1614 - invoke-direct {v12, v11, v7}, Ljava/lang/ProcessManager$ProcessReference;-><init>(Ljava/lang/ProcessManager$ProcessImpl;Ljava/lang/ProcessManager$ProcessReferenceQueue;)V
1615 + move-object/from16 v0, v16
1617 + invoke-direct {v0, v7, v9}, Ljava/lang/ProcessManager$ProcessReference;-><init>(Ljava/lang/ProcessManager$ProcessImpl;Ljava/lang/ProcessManager$ProcessReferenceQueue;)V
1619 move-object/from16 v0, p0
1621 - iget-object v7, v0, Ljava/lang/ProcessManager;->processReferences:Ljava/util/Map;
1622 + iget-object v9, v0, Ljava/lang/ProcessManager;->processReferences:Ljava/util/Map;
1624 + invoke-static {v8}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
1626 - invoke-static {v10}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
1627 + move-result-object v10
1629 - move-result-object v15
1630 + move-object/from16 v0, v16
1632 - invoke-interface {v7, v15, v12}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
1633 + invoke-interface {v9, v10, v0}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
1635 move-object/from16 v0, p0
1637 - iget-object v7, v0, Ljava/lang/ProcessManager;->processReferences:Ljava/util/Map;
1638 + iget-object v9, v0, Ljava/lang/ProcessManager;->processReferences:Ljava/util/Map;
1640 - invoke-virtual {v7}, Ljava/lang/Object;->notifyAll()V
1641 + invoke-virtual {v9}, Ljava/lang/Object;->notifyAll()V
1643 - monitor-exit v14
1644 - :try_end_bc
1645 - .catchall {:try_start_9b .. :try_end_bc} :catchall_fd
1646 + monitor-exit v18
1647 + :try_end_1ad
1648 + .catchall {:try_start_188 .. :try_end_1ad} :catchall_1f2
1650 - return-object v11
1651 + return-object v7
1653 - :cond_bd
1654 + :cond_1ae
1655 invoke-virtual/range {p3 .. p3}, Ljava/io/File;->getPath()Ljava/lang/String;
1657 move-result-object v3
1659 - goto :goto_90
1660 + goto :goto_179
1662 - :catch_c2
1663 - move-exception v8
1664 + :catch_1b3
1665 + move-exception v13
1667 - :try_start_c3
1668 - new-instance v13, Ljava/io/IOException;
1669 + :try_start_1b4
1670 + new-instance v17, Ljava/io/IOException;
1672 - new-instance v7, Ljava/lang/StringBuilder;
1673 + new-instance v9, Ljava/lang/StringBuilder;
1675 - invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
1676 + invoke-direct {v9}, Ljava/lang/StringBuilder;-><init>()V
1678 - const-string v15, "Error running exec(). Command: "
1679 + const-string v10, "Error running exec(). Command: "
1681 - invoke-virtual {v7, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1682 + invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1684 - move-result-object v7
1685 + move-result-object v9
1687 invoke-static {v1}, Ljava/util/Arrays;->toString([Ljava/lang/Object;)Ljava/lang/String;
1689 - move-result-object v15
1690 + move-result-object v10
1692 - invoke-virtual {v7, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1693 + invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1695 - move-result-object v7
1696 + move-result-object v9
1698 - const-string v15, " Working Directory: "
1699 + const-string v10, " Working Directory: "
1701 - invoke-virtual {v7, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1702 + invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1704 - move-result-object v7
1705 + move-result-object v9
1707 move-object/from16 v0, p3
1709 - invoke-virtual {v7, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
1710 + invoke-virtual {v9, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
1712 - move-result-object v7
1713 + move-result-object v9
1715 - const-string v15, " Environment: "
1716 + const-string v10, " Environment: "
1718 - invoke-virtual {v7, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1719 + invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1721 - move-result-object v7
1722 + move-result-object v9
1724 invoke-static {v2}, Ljava/util/Arrays;->toString([Ljava/lang/Object;)Ljava/lang/String;
1726 - move-result-object v15
1727 + move-result-object v10
1729 + invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1731 + move-result-object v9
1733 + invoke-virtual {v9}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
1735 + move-result-object v9
1737 + move-object/from16 v0, v17
1739 + invoke-direct {v0, v9}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
1741 + move-object/from16 v0, v17
1743 + invoke-virtual {v0, v13}, Ljava/io/IOException;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
1745 + throw v17
1747 - invoke-virtual {v7, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
1748 + :catchall_1f2
1749 + move-exception v9
1751 - move-result-object v7
1752 + monitor-exit v18
1753 + :try_end_1f4
1754 + .catchall {:try_start_1b4 .. :try_end_1f4} :catchall_1f2
1756 - invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
1757 + throw v9
1759 - move-result-object v7
1760 + :cond_1f5
1761 + :try_start_1f5
1762 + new-instance v7, Ljava/lang/ProcessManager$ProcessImpl;
1764 - invoke-direct {v13, v7}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
1765 + const/4 v12, 0x0
1767 - invoke-virtual {v13, v8}, Ljava/io/IOException;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
1768 + move-object v9, v4
1770 - throw v13
1771 + move-object v10, v5
1773 - :catchall_fd
1774 - move-exception v7
1775 + move-object v11, v6
1777 - monitor-exit v14
1778 - :try_end_ff
1779 - .catchall {:try_start_c3 .. :try_end_ff} :catchall_fd
1780 + invoke-direct/range {v7 .. v12}, Ljava/lang/ProcessManager$ProcessImpl;-><init>(ILjava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Z)V
1781 + :try_end_1fe
1782 + .catchall {:try_start_1f5 .. :try_end_1fe} :catchall_1f2
1784 - throw v7
1785 + goto :goto_18d
1786 .end method