1 | <?php |
||||
2 | |||||
3 | // repair user.global_prefs fields that were corrupted |
||||
4 | // (non-parsable XML) by a bug at some point. |
||||
5 | // |
||||
6 | // This fixes 2 types of corruption: |
||||
7 | // - missing </venue> tag before closing </global_preferences> |
||||
8 | // - \" instead of " |
||||
9 | |||||
10 | require_once("../inc/boinc_db.inc"); |
||||
11 | |||||
12 | // insert "\n</venue>\n" before "</global_preferences>" |
||||
13 | // This fixes an XML error introduced at some point in the past |
||||
14 | // |
||||
15 | function repair_prefs($prefs) { |
||||
16 | if (strstr($prefs, '\"')) { |
||||
17 | return str_replace('\"', '"', $prefs); |
||||
18 | } |
||||
19 | $x = strstr($prefs, "</global_preferences>", true); |
||||
20 | if (!$x) return null; |
||||
21 | return "$x\n </venue>\n</global_preferences>\n"; |
||||
22 | } |
||||
23 | |||||
24 | function process_set($users) { |
||||
25 | foreach ($users as $user) { |
||||
26 | if (!$user->global_prefs) { |
||||
27 | //echo "$user->id: no prefs\n"; |
||||
28 | continue; |
||||
29 | } |
||||
30 | $retval = @simplexml_load_string($user->global_prefs); |
||||
31 | if ($retval) { |
||||
0 ignored issues
–
show
|
|||||
32 | //echo "$user->id: good\n"; |
||||
33 | } else { |
||||
34 | echo "repairing prefs for user $user->id\n"; |
||||
35 | $p = repair_prefs($user->global_prefs); |
||||
36 | if ($p) { |
||||
37 | $xml_obj = @simplexml_load_string($p); |
||||
38 | if ($xml_obj) { |
||||
39 | // increase mod_time by 1 second so new preferences are propagated to the Client |
||||
40 | $xml_obj->mod_time = 1 + intval($xml_obj->mod_time); |
||||
41 | $p = $xml_obj->asXML(); |
||||
42 | // remove XML header |
||||
43 | $p = implode("\n", array_slice(explode("\n", $p), 1)); |
||||
0 ignored issues
–
show
It seems like
$p can also be of type true ; however, parameter $string of explode() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
44 | $user->update("global_prefs='$p'"); |
||||
45 | echo " repair succeeded\n"; |
||||
46 | } else { |
||||
47 | echo " repair failed\n"; |
||||
48 | } |
||||
49 | } else { |
||||
50 | echo " prefs are missing end tag\n"; |
||||
51 | } |
||||
52 | } |
||||
53 | } |
||||
54 | } |
||||
55 | |||||
56 | |||||
57 | $n = 0; |
||||
58 | $maxid = BoincUser::max("id"); |
||||
59 | while ($n <= $maxid) { |
||||
60 | $m = $n + 1000; |
||||
61 | $users = BoincUser::enum("id >= $n and id < $m"); |
||||
62 | //echo "processing from $n\n"; |
||||
63 | if (!$users) break; |
||||
64 | process_set($users); |
||||
65 | $n = $m; |
||||
66 | } |
||||
67 | ?> |
||||
68 |
This check looks for the bodies of
if
statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.These
if
bodies can be removed. If you have an empty if but statements in theelse
branch, consider inverting the condition.could be turned into
This is much more concise to read.