fluxbb-1.5.1 to fluxbb-1.5.3 Legend
Lines removed 
Lines changed
 Lines added

a/admin_bans.php b/admin_bans.php
127:                                 <tr>127:                                 <tr>
128:                                     <th scope="row"><?php echo $lang_admin_bans['IP label'] ?></th>128:                                     <th scope="row"><?php echo $lang_admin_bans['IP label'] ?></th>
129:                                     <td>129:                                     <td>
130:                                         <input type="text" name="ban_ip" size="45" maxlength="255" value="<?php if (isset($ban_ip)) echo $ban_ip; ?>" tabindex="2" />130:                                         <input type="text" name="ban_ip" size="45" maxlength="255" value="<?php if (isset($ban_ip)) echo pun_htmlspecialchars($ban_ip); ?>" tabindex="2" />
131:                                         <span><?php echo $lang_admin_bans['IP help'] ?><?php if ($ban_user != '' && isset($user_id)) printf(' '.$lang_admin_bans['IP help link'], '<a href="admin_users.php?ip_stats='.$user_id.'">'.$lang_admin_common['here'].'</a>') ?></span>131:                                         <span><?php echo $lang_admin_bans['IP help'] ?><?php if ($ban_user != '' && isset($user_id)) printf(' '.$lang_admin_bans['IP help link'], '<a href="admin_users.php?ip_stats='.$user_id.'">'.$lang_admin_common['here'].'</a>') ?></span>
132:                                     </td>132:                                     </td>
133:                                 </tr>133:                                 </tr>
435:                 <tr>435:                 <tr>
436:                     <td class="tcl"><?php echo ($ban_data['username'] != '') ? pun_htmlspecialchars($ban_data['username']) : '&#160;' ?></td>436:                     <td class="tcl"><?php echo ($ban_data['username'] != '') ? pun_htmlspecialchars($ban_data['username']) : '&#160;' ?></td>
437:                     <td class="tc2"><?php echo ($ban_data['email'] != '') ? $ban_data['email'] : '&#160;' ?></td>437:                     <td class="tc2"><?php echo ($ban_data['email'] != '') ? $ban_data['email'] : '&#160;' ?></td>
438:                     <td class="tc3"><?php echo ($ban_data['ip'] != '') ? $ban_data['ip'] : '&#160;' ?></td>438:                     <td class="tc3"><?php echo ($ban_data['ip'] != '') ? pun_htmlspecialchars($ban_data['ip']) : '&#160;' ?></td>
439:                     <td class="tc4"><?php echo $expire ?></td>439:                     <td class="tc4"><?php echo $expire ?></td>
440:                     <td class="tc5"><?php echo ($ban_data['message'] != '') ? pun_htmlspecialchars($ban_data['message']) : '&#160;' ?></td>440:                     <td class="tc5"><?php echo ($ban_data['message'] != '') ? pun_htmlspecialchars($ban_data['message']) : '&#160;' ?></td>
441:                     <td class="tc6"><?php echo ($ban_data['ban_creator_username'] != '') ? '<a href="profile.php?id='.$ban_data['ban_creator'].'">'.pun_htmlspecialchars($ban_data['ban_creator_username']).'</a>' : $lang_admin_bans['Unknown'] ?></td>441:                     <td class="tc6"><?php echo ($ban_data['ban_creator_username'] != '') ? '<a href="profile.php?id='.$ban_data['ban_creator'].'">'.pun_htmlspecialchars($ban_data['ban_creator_username']).'</a>' : $lang_admin_bans['Unknown'] ?></td>


a/admin_users.php b/admin_users.php
 83:  83: 
 84: ?> 84: ?>
 85:                 <tr> 85:                 <tr>
 86:                     <td class="tcl"><a href="moderate.php?get_host=<?php echo $cur_ip['poster_ip'] ?>"><?php echo $cur_ip['poster_ip'] ?></a></td> 86:                     <td class="tcl"><a href="moderate.php?get_host=<?php echo pun_htmlspecialchars($cur_ip['poster_ip']) ?>"><?php echo pun_htmlspecialchars($cur_ip['poster_ip']) ?></a></td>
 87:                     <td class="tc2"><?php echo format_time($cur_ip['last_used']) ?></td> 87:                     <td class="tc2"><?php echo format_time($cur_ip['last_used']) ?></td>
 88:                     <td class="tc3"><?php echo $cur_ip['used_times'] ?></td> 88:                     <td class="tc3"><?php echo $cur_ip['used_times'] ?></td>
 89:                     <td class="tcr"><a href="admin_users.php?show_users=<?php echo $cur_ip['poster_ip'] ?>"><?php echo $lang_admin_users['Results find more link'] ?></a></td> 89:                     <td class="tcr"><a href="admin_users.php?show_users=<?php echo pun_htmlspecialchars($cur_ip['poster_ip']) ?>"><?php echo $lang_admin_users['Results find more link'] ?></a></td>
 90:                 </tr> 90:                 </tr>
 91: <?php 91: <?php
 92:  92: 


a/db_update.php b/db_update.php
  7:  */  7:  */
  8:   8: 
  9: // The FluxBB version this script updates to  9: // The FluxBB version this script updates to
 10: define('UPDATE_TO', '1.5.1'); 10: define('UPDATE_TO', '1.5.3');
 11:  11: 
 12: define('UPDATE_TO_DB_REVISION', 18); 12: define('UPDATE_TO_DB_REVISION', 18);
 13: define('UPDATE_TO_SI_REVISION', 2); 13: define('UPDATE_TO_SI_REVISION', 2);


a/header.php b/header.php
 17: header('Pragma: no-cache'); // For HTTP/1.0 compatibility 17: header('Pragma: no-cache'); // For HTTP/1.0 compatibility
 18:  18: 
 19: // Send the Content-type header in case the web server is setup to send something else 19: // Send the Content-type header in case the web server is setup to send something else
 20: header('Content-type: '.get_mime().'; charset=utf-8'); 20: header('Content-type: text/html; charset=utf-8');
 21:  21: 
 22: // Load the template 22: // Load the template
 23: if (defined('PUN_ADMIN_CONSOLE')) 23: if (defined('PUN_ADMIN_CONSOLE'))
 86: // Define $p if it's not set to avoid a PHP notice 86: // Define $p if it's not set to avoid a PHP notice
 87: $p = isset($p) ? $p : null; 87: $p = isset($p) ? $p : null;
 88:  88: 
 89: echo '<meta http-equiv="Content-Type" content="'.get_mime().'; charset=utf-8" />'."\n"; 
 90:  
 91: // Is this a page that we want search index spiders to index? 89: // Is this a page that we want search index spiders to index?
 92: if (!defined('PUN_ALLOW_INDEX')) 90: if (!defined('PUN_ALLOW_INDEX'))
 93:     echo '<meta name="ROBOTS" content="NOINDEX, FOLLOW" />'."\n"; 91:     echo '<meta name="ROBOTS" content="NOINDEX, FOLLOW" />'."\n";


a/include/common.php b/include/common.php
 10:     exit('The constant PUN_ROOT must be defined and point to a valid FluxBB installation root directory.'); 10:     exit('The constant PUN_ROOT must be defined and point to a valid FluxBB installation root directory.');
 11:  11: 
 12: // Define the version and database revision that this code was written for 12: // Define the version and database revision that this code was written for
 13: define('FORUM_VERSION', '1.5.1'); 13: define('FORUM_VERSION', '1.5.3');
 14:  14: 
 15: define('FORUM_DB_REVISION', 18); 15: define('FORUM_DB_REVISION', 18);
 16: define('FORUM_SI_REVISION', 2); 16: define('FORUM_SI_REVISION', 2);


a/include/dblayer/mysql.php b/include/dblayer/mysql.php
303: 303: 
304:     function rename_table($old_table, $new_table, $no_prefix = false)304:     function rename_table($old_table, $new_table, $no_prefix = false)
305:     {305:     {
306:         // If there new table exists and the old one doesn't, then we're happy306:         // If the new table exists and the old one doesn't, then we're happy
307:         if ($this->table_exists($new_table, $no_prefix) && !$this->table_exists($old_table, $no_prefix))307:         if ($this->table_exists($new_table, $no_prefix) && !$this->table_exists($old_table, $no_prefix))
308:             return true;308:             return true;
309: 309: 
321:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))321:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))
322:             $default_value = '\''.$this->escape($default_value).'\'';322:             $default_value = '\''.$this->escape($default_value).'\'';
323: 323: 
324:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : ' ').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;324:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? '' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : '').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;
325:     }325:     }
326: 326: 
327: 327: 
335:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))335:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))
336:             $default_value = '\''.$this->escape($default_value).'\'';336:             $default_value = '\''.$this->escape($default_value).'\'';
337: 337: 
338:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : ' ').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;338:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? '' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : '').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;
339:     }339:     }
340: 340: 
341: 341: 


a/include/dblayer/mysql_innodb.php b/include/dblayer/mysql_innodb.php
317: 317: 
318:     function rename_table($old_table, $new_table, $no_prefix = false)318:     function rename_table($old_table, $new_table, $no_prefix = false)
319:     {319:     {
320:         // If there new table exists and the old one doesn't, then we're happy320:         // If the new table exists and the old one doesn't, then we're happy
321:         if ($this->table_exists($new_table, $no_prefix) && !$this->table_exists($old_table, $no_prefix))321:         if ($this->table_exists($new_table, $no_prefix) && !$this->table_exists($old_table, $no_prefix))
322:             return true;322:             return true;
323: 323: 
335:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))335:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))
336:             $default_value = '\''.$this->escape($default_value).'\'';336:             $default_value = '\''.$this->escape($default_value).'\'';
337: 337: 
338:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : ' ').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;338:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? '' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : '').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;
339:     }339:     }
340: 340: 
341: 341: 
349:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))349:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))
350:             $default_value = '\''.$this->escape($default_value).'\'';350:             $default_value = '\''.$this->escape($default_value).'\'';
351: 351: 
352:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : ' ').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;352:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? '' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : '').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;
353:     }353:     }
354: 354: 
355: 355: 


a/include/dblayer/mysqli.php b/include/dblayer/mysqli.php
328:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))328:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))
329:             $default_value = '\''.$this->escape($default_value).'\'';329:             $default_value = '\''.$this->escape($default_value).'\'';
330: 330: 
331:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : ' ').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;331:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? '' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : '').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;
332:     }332:     }
333: 333: 
334: 334: 
342:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))342:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))
343:             $default_value = '\''.$this->escape($default_value).'\'';343:             $default_value = '\''.$this->escape($default_value).'\'';
344: 344: 
345:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : ' ').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;345:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? '' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : '').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;
346:     }346:     }
347: 347: 
348: 348: 


a/include/dblayer/mysqli_innodb.php b/include/dblayer/mysqli_innodb.php
323: 323: 
324:     function rename_table($old_table, $new_table, $no_prefix = false)324:     function rename_table($old_table, $new_table, $no_prefix = false)
325:     {325:     {
326:         // If there new table exists and the old one doesn't, then we're happy326:         // If the new table exists and the old one doesn't, then we're happy
327:         if ($this->table_exists($new_table, $no_prefix) && !$this->table_exists($old_table, $no_prefix))327:         if ($this->table_exists($new_table, $no_prefix) && !$this->table_exists($old_table, $no_prefix))
328:             return true;328:             return true;
329: 329: 
341:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))341:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))
342:             $default_value = '\''.$this->escape($default_value).'\'';342:             $default_value = '\''.$this->escape($default_value).'\'';
343: 343: 
344:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : ' ').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;344:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? '' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : '').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;
345:     }345:     }
346: 346: 
347: 347: 
355:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))355:         if (!is_null($default_value) && !is_int($default_value) && !is_float($default_value))
356:             $default_value = '\''.$this->escape($default_value).'\'';356:             $default_value = '\''.$this->escape($default_value).'\'';
357: 357: 
358:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : ' ').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;358:         return $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? '' : ' NOT NULL').(!is_null($default_value) ? ' DEFAULT '.$default_value : '').(!is_null($after_field) ? ' AFTER '.$after_field : '')) ? true : false;
359:     }359:     }
360: 360: 
361: 361: 


a/include/dblayer/sqlite.php b/include/dblayer/sqlite.php
349:     }349:     }
350: 350: 
351: 351: 
352:     function rename_table($old_name, $new_name, $no_prefix = false)352:     function rename_table($old_table, $new_table, $no_prefix = false)
353:     {353:     {
354:         // If the new table exists and the old one doesn't, then we're happy354:         // If the old table does not exist
355:         if ($this->table_exists($new_table, $no_prefix) && !$this->table_exists($old_table, $no_prefix))355:         if (!$this->table_exists($old_table, $no_prefix))
 356:             return false;
 357:         // If the table names are the same
 358:         else if ($old_table == $new_table)
356:             return true;359:             return true;
 360:         // If the new table already exists
 361:         else if ($this->table_exists($new_table, $no_prefix))
 362:             return false;
357: 363: 
358:         $table = $this->get_table_info($old_name, $no_prefix);364:         $table = $this->get_table_info($old_table, $no_prefix);
359: 365: 
360:         // Create new table366:         // Create new table
361:         $newtable = str_replace('CREATE TABLE '.($no_prefix ? '' : $this->prefix).$this->escape($old_name).' (', 'CREATE TABLE '.($no_prefix ? '' : $this->prefix).$this->escape($new_name).' (', $table['sql']);367:         $query = str_replace('CREATE TABLE '.($no_prefix ? '' : $this->prefix).$this->escape($old_table).' (', 'CREATE TABLE '.($no_prefix ? '' : $this->prefix).$this->escape($new_table).' (', $table['sql']);
362:         $result = $this->query($newtable) ? true : false;368:         $result = $this->query($query) ? true : false;
363: 369: 
364:         // Recreate indexes370:         // Recreate indexes
365:         if (!empty($table['indices']))371:         if (!empty($table['indices']))
366:         {372:         {
367:             foreach ($table['indices'] as $cur_index)373:             foreach ($table['indices'] as $cur_index)
368:                 $result &= $this->query($cur_index) ? true : false;374:             {
 375:                 $query = str_replace('CREATE INDEX '.($no_prefix ? '' : $this->prefix).$this->escape($old_table), 'CREATE INDEX '.($no_prefix ? '' : $this->prefix).$this->escape($new_table), $cur_index);
 376:                 $query = str_replace('ON '.($no_prefix ? '' : $this->prefix).$this->escape($old_table), 'ON '.($no_prefix ? '' : $this->prefix).$this->escape($new_table), $query);
 377:                 $result &= $this->query($query) ? true : false;
 378:             }
369:         }379:         }
370: 380: 
371:         // Copy content across381:         // Copy content across
372:         $result &= $this->query('INSERT INTO '.($no_prefix ? '' : $this->prefix).$this->escape($new_name).' SELECT * FROM '.($no_prefix ? '' : $this->prefix).$this->escape($old_name)) ? true : false;382:         $result &= $this->query('INSERT INTO '.($no_prefix ? '' : $this->prefix).$this->escape($new_table).' SELECT * FROM '.($no_prefix ? '' : $this->prefix).$this->escape($old_table)) ? true : false;
373: 383: 
374:         // Drop old table384:         // Drop the old table if the new one exists
375:         $result &= $this->drop_table($table_name, $no_prefix);385:         if ($this->table_exists($new_table, $no_prefix))
 386:             $result &= $this->drop_table($old_table, $no_prefix);
376: 387: 
377:         return $result;388:         return $result;
378:     }389:     }
436:         // Create new table sql447:         // Create new table sql
437:         $field_type = preg_replace(array_keys($this->datatype_transformations), array_values($this->datatype_transformations), $field_type);448:         $field_type = preg_replace(array_keys($this->datatype_transformations), array_values($this->datatype_transformations), $field_type);
438:         $query = $field_type;449:         $query = $field_type;
 450: 
439:         if (!$allow_null)451:         if (!$allow_null)
440:             $query .= ' NOT NULL';452:             $query .= ' NOT NULL';
441:         if (is_null($default_value) || $default_value === '')453:         
 454:         if ($default_value === '')
442:             $default_value = '\'\'';455:             $default_value = '\'\'';
443: 456: 
444:         $query .= ' DEFAULT '.$default_value;457:         if (!is_null($default_value))
 458:             $query .= ' DEFAULT '.$default_value;
445: 459: 
446:         $old_columns = array_keys($table['columns']);460:         $old_columns = array_keys($table['columns']);
447: 461: 
496:     }510:     }
497: 511: 
498: 512: 
499:     function alter_field($table_name, $field_name, $field_type, $allow_null, $default_value = null, $after_field = 0, $no_prefix = false)513:     function alter_field($table_name, $field_name, $field_type, $allow_null, $default_value = null, $after_field = null, $no_prefix = false)
500:     {514:     {
501:         // Unneeded for SQLite515:         // Unneeded for SQLite
502:         return true;516:         return true;


a/include/functions.php b/include/functions.php
  6:  * License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher  6:  * License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
  7:  */  7:  */
  8:   8: 
   9: include PUN_ROOT.'include/srand.php';
  10: 
  9:  11: 
 10: // 12: //
 11: // Return current timestamp (with microseconds) as a float 13: // Return current timestamp (with microseconds) as a float
244:     $remote_addr = get_remote_address();246:     $remote_addr = get_remote_address();
245: 247: 
246:     // Fetch guest user248:     // Fetch guest user
247:     $result = $db->query('SELECT u.*, g.*, o.logged, o.last_post, o.last_search FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$db->prefix.'online AS o ON o.ident=\''.$remote_addr.'\' WHERE u.id=1') or error('Unable to fetch guest information', __FILE__, __LINE__, $db->error());249:     $result = $db->query('SELECT u.*, g.*, o.logged, o.last_post, o.last_search FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$db->prefix.'online AS o ON o.ident=\''.$db->escape($remote_addr).'\' WHERE u.id=1') or error('Unable to fetch guest information', __FILE__, __LINE__, $db->error());
248:     if (!$db->num_rows($result))250:     if (!$db->num_rows($result))
249:         exit('Unable to fetch guest information. Your database must contain both a guest user and a guest user group.');251:         exit('Unable to fetch guest information. Your database must contain both a guest user and a guest user group.');
250: 252: 
984: //986: //
985: function random_key($len, $readable = false, $hash = false)987: function random_key($len, $readable = false, $hash = false)
986: {988: {
987:     $key = '';989:     $key = secure_random_bytes($len);
988: 990: 
989:     if ($hash)991:     if ($hash)
990:         $key = substr(pun_hash(uniqid(rand(), true)), 0, $len);992:         $key = substr(bin2hex($key), 0, $len);
991:     else if ($readable)993:     else if ($readable)
992:     {994:         $key = substr(base64_encode($key), 0, $len);
993:         $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 
994:  
995:         for ($i = 0; $i < $len; ++$i) 
996:             $key .= substr($chars, (mt_rand() % strlen($chars)), 1); 
997:     } 
998:     else 
999:     { 
1000:         for ($i = 0; $i < $len; ++$i) 
1001:             $key .= chr(mt_rand(33, 126)); 
1002:     } 
1003: 995: 
1004:     return $key;996:     return $key;
1005: }997: }
1182:     header('Pragma: no-cache'); // For HTTP/1.0 compatibility1174:     header('Pragma: no-cache'); // For HTTP/1.0 compatibility
1183: 1175: 
1184:     // Send the Content-type header in case the web server is setup to send something else1176:     // Send the Content-type header in case the web server is setup to send something else
1185:     header('Content-type: '.get_mime().'; charset=utf-8');1177:     header('Content-type: text/html; charset=utf-8');
1186: 1178: 
1187:     // Deal with newlines, tabs and multiple spaces1179:     // Deal with newlines, tabs and multiple spaces
1188:     $pattern = array("\t", '  ', '  ');1180:     $pattern = array("\t", '  ', '  ');
1240:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_common['Maintenance']);1232:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_common['Maintenance']);
1241: 1233: 
1242: ?>1234: ?>
1243: <meta http-equiv="Content-Type" content="<?php echo get_mime() ?>; charset=utf-8" /> 
1244: <title><?php echo generate_page_title($page_title) ?></title>1235: <title><?php echo generate_page_title($page_title) ?></title>
1245: <link rel="stylesheet" type="text/css" href="style/<?php echo $pun_user['style'].'.css' ?>" />1236: <link rel="stylesheet" type="text/css" href="style/<?php echo $pun_user['style'].'.css' ?>" />
1246: <?php1237: <?php
1310:     header('Pragma: no-cache'); // For HTTP/1.0 compatibility1301:     header('Pragma: no-cache'); // For HTTP/1.0 compatibility
1311: 1302: 
1312:     // Send the Content-type header in case the web server is setup to send something else1303:     // Send the Content-type header in case the web server is setup to send something else
1313:     header('Content-type: '.get_mime().'; charset=utf-8');1304:     header('Content-type: text/html; charset=utf-8');
1314: 1305: 
1315:     if (file_exists(PUN_ROOT.'style/'.$pun_user['style'].'/redirect.tpl'))1306:     if (file_exists(PUN_ROOT.'style/'.$pun_user['style'].'/redirect.tpl'))
1316:     {1307:     {
1363:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_common['Redirecting']);1354:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_common['Redirecting']);
1364: 1355: 
1365: ?>1356: ?>
1366: <meta http-equiv="Content-Type" content="<?php echo get_mime() ?>; charset=utf-8" /> 
1367: <meta http-equiv="refresh" content="<?php echo $pun_config['o_redirect_delay'] ?>;URL=<?php echo $destination_url ?>" />1357: <meta http-equiv="refresh" content="<?php echo $pun_config['o_redirect_delay'] ?>;URL=<?php echo $destination_url ?>" />
1368: <title><?php echo generate_page_title($page_title) ?></title>1358: <title><?php echo generate_page_title($page_title) ?></title>
1369: <link rel="stylesheet" type="text/css" href="style/<?php echo $pun_user['style'].'.css' ?>" />1359: <link rel="stylesheet" type="text/css" href="style/<?php echo $pun_user['style'].'.css' ?>" />
2012: }2002: }
2013: 2003: 
2014: 2004: 
2015: // 
2016: // This function returns the correct mime type to serve with XHTML 
2017: // 
2018: function get_mime() 
2019: { 
2020:     if (isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml') !== false) 
2021:         return 'application/xhtml+xml'; 
2022:     // special check for the W3C validation service 
2023:     else if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator') !== false) 
2024:         return 'application/xhtml+xml'; 
2025:     else 
2026:         return 'text/html'; 
2027: } 
2028:  
2029:  
2030: // DEBUG FUNCTIONS BELOW2005: // DEBUG FUNCTIONS BELOW
2031: 2006: 
2032: //2007: //


a/include/parser.php b/include/parser.php
106:     if ($pun_config['o_make_links'] == '1')106:     if ($pun_config['o_make_links'] == '1')
107:         $text = do_clickable($text);107:         $text = do_clickable($text);
108: 108: 
 109:     $temp_text = false;
 110:     if (empty($errors))
 111:         $temp_text = preparse_tags($text, $errors, $is_signature);
 112: 
 113:     if ($temp_text !== false)
 114:         $text = $temp_text;
 115: 
109:     // If we split up the message before we have to concatenate it together again (code tags)116:     // If we split up the message before we have to concatenate it together again (code tags)
110:     if (isset($inside))117:     if (isset($inside))
111:     {118:     {
123:         unset($inside);130:         unset($inside);
124:     }131:     }
125: 132: 
126:     $temp_text = false; 
127:     if (empty($errors)) 
128:         $temp_text = preparse_tags($text, $errors, $is_signature); 
129:  
130:     if ($temp_text !== false) 
131:         $text = $temp_text; 
132:  
133:     // Remove empty tags133:     // Remove empty tags
134:     while (($new_text = strip_empty_bbcode($text)) !== false)134:     while (($new_text = strip_empty_bbcode($text)) !== false)
135:     {135:     {
677:     else if (!preg_match('#^([a-z0-9]{3,6})://#', $url)) // Else if it doesn't start with abcdef://, we add http://677:     else if (!preg_match('#^([a-z0-9]{3,6})://#', $url)) // Else if it doesn't start with abcdef://, we add http://
678:         $full_url = 'http://'.$full_url;678:         $full_url = 'http://'.$full_url;
679: 679: 
680:     if ($bbcode === false && url_valid($full_url) === false) 
681:         $bbcode = true; 
682:  
683:     // Ok, not very pretty :-)680:     // Ok, not very pretty :-)
684:     if ($bbcode)681:     if ($bbcode)
685:     {682:     {
699:         else696:         else
700:             $link = stripslashes($link);697:             $link = stripslashes($link);
701: 698: 
702:         return '<a href="'.$full_url.'">'.$link.'</a>';699:         return '<a href="'.$full_url.'" rel="nofollow">'.$link.'</a>';
703:     }700:     }
704: }701: }
705: 702: 
714:     if (is_null($alt))711:     if (is_null($alt))
715:         $alt = basename($url);712:         $alt = basename($url);
716: 713: 
717:     $img_tag = '<a href="'.$url.'">&lt;'.$lang_common['Image link'].' - '.$alt.'&gt;</a>';714:     $img_tag = '<a href="'.$url.'" rel="nofollow">&lt;'.$lang_common['Image link'].' - '.$alt.'&gt;</a>';
718: 715: 
719:     if ($is_signature && $pun_user['show_img_sig'] != '0')716:     if ($is_signature && $pun_user['show_img_sig'] != '0')
720:         $img_tag = '<img class="sigimage" src="'.$url.'" alt="'.$alt.'" />';717:         $img_tag = '<img class="sigimage" src="'.$url.'" alt="'.$alt.'" />';


/dev/null b/include/srand.php
   1: <?php
   2: 
   3: /*
   4:  * Author:
   5:  * George Argyros <argyros.george@gmail.com>
   6:  *
   7:  * Copyright (c) 2012, George Argyros
   8:  * All rights reserved.
   9:  *
  10:  * Redistribution and use in source and binary forms, with or without
  11:  * modification, are permitted provided that the following conditions are met:
  12:  *    * Redistributions of source code must retain the above copyright
  13:  *      notice, this list of conditions and the following disclaimer.
  14:  *    * Redistributions in binary form must reproduce the above copyright
  15:  *      notice, this list of conditions and the following disclaimer in the
  16:  *      documentation and/or other materials provided with the distribution.
  17:  *    * Neither the name of the <organization> nor the
  18:  *      names of its contributors may be used to endorse or promote products
  19:  *      derived from this software without specific prior written permission.
  20:  *
  21:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  23:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  24:  * DISCLAIMED. IN NO EVENT SHALL GEORGE ARGYROS BE LIABLE FOR ANY
  25:  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  26:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  27:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  28:  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  30:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31:  *
  32:  *
  33:  *
  34:  * The function is providing, at least at the systems tested :), 
  35:  * $len bytes of entropy under any PHP installation or operating system.
  36:  * The execution time should be at most 10-20 ms in any system.
  37:  */
  38: function secure_random_bytes($len = 10)
  39: {  
  40:  
  41:    /*
  42:     * Our primary choice for a cryptographic strong randomness function is
  43:     * openssl_random_pseudo_bytes. 
  44:     */
  45:    $SSLstr = '4'; // http://xkcd.com/221/
  46:    if (function_exists('openssl_random_pseudo_bytes') && 
  47:        (version_compare(PHP_VERSION, '5.3.4') >= 0 || 
  48:     substr(PHP_OS, 0, 3) !== 'WIN'))
  49:    {
  50:       $SSLstr = openssl_random_pseudo_bytes($len, $strong);
  51:       if ($strong)
  52:          return $SSLstr;
  53:    }
  54: 
  55:    /*
  56:     * If mcrypt extension is available then we use it to gather entropy from 
  57:     * the operating system's PRNG. This is better than reading /dev/urandom 
  58:     * directly since it avoids reading larger blocks of data than needed. 
  59:     * Older versions of mcrypt_create_iv may be broken or take too much time 
  60:     * to finish so we only use this function with PHP 5.3 and above.
  61:     */
  62:    if (function_exists('mcrypt_create_iv') && 
  63:       (version_compare(PHP_VERSION, '5.3.0') >= 0 || 
  64:        substr(PHP_OS, 0, 3) !== 'WIN')) 
  65:    {
  66:       $str = mcrypt_create_iv($len, MCRYPT_DEV_URANDOM);
  67:       if ($str !== false)
  68:          return $str;    
  69:    }
  70: 
  71: 
  72:    /*
  73:     * No build-in crypto randomness function found. We collect any entropy 
  74:     * available in the PHP core PRNGs along with some filesystem info and memory
  75:     * stats. To make this data cryptographically strong we add data either from 
  76:     * /dev/urandom or if its unavailable, we gather entropy by measuring the 
  77:     * time needed to compute a number of SHA-1 hashes. 
  78:     */
  79:    $str = '';
  80:    $bits_per_round = 2; // bits of entropy collected in each clock drift round
  81:    $msec_per_round = 400; // expected running time of each round in microseconds
  82:    $hash_len = 20; // SHA-1 Hash length
  83:    $total = $len; // total bytes of entropy to collect
  84: 
  85:    $handle = @fopen('/dev/urandom', 'rb');   
  86:    if ($handle && function_exists('stream_set_read_buffer'))
  87:       @stream_set_read_buffer($handle, 0);
  88: 
  89:    do
  90:    {
  91:       $bytes = ($total > $hash_len)? $hash_len : $total;
  92:       $total -= $bytes;
  93: 
  94:       //collect any entropy available from the PHP system and filesystem
  95:       $entropy = rand() . uniqid(mt_rand(), true) . $SSLstr;
  96:       $entropy .= implode('', @fstat(@fopen( __FILE__, 'r')));
  97:       $entropy .= memory_get_usage();
  98:       if ($handle) 
  99:       {
 100:          $entropy .= @fread($handle, $bytes);
 101:       }
 102:       else
 103:       {                   
 104:          // Measure the time that the operations will take on average
 105:          for ($i = 0; $i < 3; $i ++) 
 106:          {
 107:             $c1 = microtime(true);
 108:             $var = sha1(mt_rand());
 109:             for ($j = 0; $j < 50; $j++)
 110:             {
 111:                $var = sha1($var);
 112:             }
 113:             $c2 = microtime(true);
 114:             $entropy .= $c1 . $c2;
 115:          }
 116: 
 117:          // Based on the above measurement determine the total rounds
 118:          // in order to bound the total running time.    
 119:          $rounds = (int)($msec_per_round*50 / (int)(($c2-$c1)*1000000));
 120: 
 121:          // Take the additional measurements. On average we can expect
 122:          // at least $bits_per_round bits of entropy from each measurement.
 123:          $iter = $bytes*(int)(ceil(8 / $bits_per_round));
 124:          for ($i = 0; $i < $iter; $i ++)
 125:          {
 126:             $c1 = microtime();
 127:             $var = sha1(mt_rand());
 128:             for ($j = 0; $j < $rounds; $j++)
 129:             {
 130:                $var = sha1($var);
 131:             }
 132:             $c2 = microtime();
 133:             $entropy .= $c1 . $c2;
 134:          }
 135:             
 136:       } 
 137:       // We assume sha1 is a deterministic extractor for the $entropy variable.
 138:       $str .= sha1($entropy, true);
 139:    } while ($len > strlen($str));
 140:    
 141:    if ($handle) 
 142:       @fclose($handle);
 143:    
 144:    return substr($str, 0, $len);
 145: }
  0: 146: 


a/include/template/admin.tpl b/include/template/admin.tpl
  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">
  3: <head>  3: <head>
   4: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4: <pun_head>  5: <pun_head>
  5: </head>  6: </head>
  6:   7: 


a/include/template/help.tpl b/include/template/help.tpl
  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">
  3: <head>  3: <head>
   4: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4: <pun_head>  5: <pun_head>
  5: </head>  6: </head>
  6:   7: 


a/include/template/main.tpl b/include/template/main.tpl
  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">
  3: <head>  3: <head>
   4: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4: <pun_head>  5: <pun_head>
  5: </head>  6: </head>
  6:   7: 


a/include/template/maintenance.tpl b/include/template/maintenance.tpl
  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">
  3: <head>  3: <head>
   4: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4: <pun_head>  5: <pun_head>
  5: </head>  6: </head>
  6:   7: 


a/include/template/redirect.tpl b/include/template/redirect.tpl
  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">  2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">
  3: <head>  3: <head>
   4: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4: <pun_head>  5: <pun_head>
  5: </head>  6: </head>
  6:   7: 


a/install.php b/install.php
  7:  */  7:  */
  8:   8: 
  9: // The FluxBB version this script installs  9: // The FluxBB version this script installs
 10: define('FORUM_VERSION', '1.5.1'); 10: define('FORUM_VERSION', '1.5.3');
 11:  11: 
 12: define('FORUM_DB_REVISION', 18); 12: define('FORUM_DB_REVISION', 18);
 13: define('FORUM_SI_REVISION', 2); 13: define('FORUM_SI_REVISION', 2);
1565:     $db->query('INSERT INTO '.$db_prefix.'users (group_id, username, password, email) VALUES(3, \''.$db->escape($lang_install['Guest']).'\', \''.$db->escape($lang_install['Guest']).'\', \''.$db->escape($lang_install['Guest']).'\')')1565:     $db->query('INSERT INTO '.$db_prefix.'users (group_id, username, password, email) VALUES(3, \''.$db->escape($lang_install['Guest']).'\', \''.$db->escape($lang_install['Guest']).'\', \''.$db->escape($lang_install['Guest']).'\')')
1566:         or error('Unable to add guest user. Please check your configuration and try again', __FILE__, __LINE__, $db->error());1566:         or error('Unable to add guest user. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
1567: 1567: 
1568:     $db->query('INSERT INTO '.$db_prefix.'users (group_id, username, password, email, language, style, num_posts, last_post, registered, registration_ip, last_visit) VALUES(1, \''.$db->escape($username).'\', \''.pun_hash($password1).'\', \''.$email.'\', \''.$db->escape($default_lang).'\', \''.$db->escape($default_style).'\', 1, '.$now.', '.$now.', \''.get_remote_address().'\', '.$now.')')1568:     $db->query('INSERT INTO '.$db_prefix.'users (group_id, username, password, email, language, style, num_posts, last_post, registered, registration_ip, last_visit) VALUES(1, \''.$db->escape($username).'\', \''.pun_hash($password1).'\', \''.$email.'\', \''.$db->escape($default_lang).'\', \''.$db->escape($default_style).'\', 1, '.$now.', '.$now.', \''.$db->escape(get_remote_address()).'\', '.$now.')')
1569:         or error('Unable to add administrator user. Please check your configuration and try again', __FILE__, __LINE__, $db->error());1569:         or error('Unable to add administrator user. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
1570: 1570: 
1571:     // Enable/disable avatars depending on file_uploads setting in PHP configuration1571:     // Enable/disable avatars depending on file_uploads setting in PHP configuration
1671:     $db->query('INSERT INTO '.$db_prefix.'topics (poster, subject, posted, first_post_id, last_post, last_post_id, last_poster, forum_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape($subject).'\', '.$now.', 1, '.$now.', 1, \''.$db->escape($username).'\', 1)')1671:     $db->query('INSERT INTO '.$db_prefix.'topics (poster, subject, posted, first_post_id, last_post, last_post_id, last_poster, forum_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape($subject).'\', '.$now.', 1, '.$now.', 1, \''.$db->escape($username).'\', 1)')
1672:         or error('Unable to insert into table '.$db_prefix.'topics. Please check your configuration and try again', __FILE__, __LINE__, $db->error());1672:         or error('Unable to insert into table '.$db_prefix.'topics. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
1673: 1673: 
1674:     $db->query('INSERT INTO '.$db_prefix.'posts (poster, poster_id, poster_ip, message, posted, topic_id) VALUES(\''.$db->escape($username).'\', 2, \''.get_remote_address().'\', \''.$db->escape($message).'\', '.$now.', 1)')1674:     $db->query('INSERT INTO '.$db_prefix.'posts (poster, poster_id, poster_ip, message, posted, topic_id) VALUES(\''.$db->escape($username).'\', 2, \''.$db->escape(get_remote_address()).'\', \''.$db->escape($message).'\', '.$now.', 1)')
1675:         or error('Unable to insert into table '.$db_prefix.'posts. Please check your configuration and try again', __FILE__, __LINE__, $db->error());1675:         or error('Unable to insert into table '.$db_prefix.'posts. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
1676: 1676: 
1677:     // Index the test post so searching for it works1677:     // Index the test post so searching for it works


a/misc.php b/misc.php
270: 270: 
271:         $db->query('UPDATE '.$db->prefix.'users SET last_report_sent='.time().' WHERE id='.$pun_user['id']) or error('Unable to update user', __FILE__, __LINE__, $db->error());271:         $db->query('UPDATE '.$db->prefix.'users SET last_report_sent='.time().' WHERE id='.$pun_user['id']) or error('Unable to update user', __FILE__, __LINE__, $db->error());
272: 272: 
273:         redirect('viewtopic.php?pid='.$post_id.'#p'.$post_id, $lang_misc['Report redirect']);273:         redirect('viewforum.php?id='.$forum_id, $lang_misc['Report redirect']);
274:     }274:     }
275: 275: 
276:     // Fetch some info about the post, the topic and the forum276:     // Fetch some info about the post, the topic and the forum


a/post.php b/post.php
171:                 $new_tid = $tid;171:                 $new_tid = $tid;
172: 172: 
173:                 // Insert the new post173:                 // Insert the new post
174:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());174:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.$db->escape(get_remote_address()).'\', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
175:                 $new_pid = $db->insert_id();175:                 $new_pid = $db->insert_id();
176: 176: 
177:                 // To subscribe or not to subscribe, that ...177:                 // To subscribe or not to subscribe, that ...
187:             {187:             {
188:                 // It's a guest. Insert the new post188:                 // It's a guest. Insert the new post
189:                 $email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$db->escape($email).'\'' : 'NULL';189:                 $email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$db->escape($email).'\'' : 'NULL';
190:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.get_remote_address().'\', '.$email_sql.', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());190:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape(get_remote_address()).'\', '.$email_sql.', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
191:                 $new_pid = $db->insert_id();191:                 $new_pid = $db->insert_id();
192:             }192:             }
193: 193: 
293:                     $db->query('INSERT INTO '.$db->prefix.'topic_subscriptions (user_id, topic_id) VALUES('.$pun_user['id'].' ,'.$new_tid.')') or error('Unable to add subscription', __FILE__, __LINE__, $db->error());293:                     $db->query('INSERT INTO '.$db->prefix.'topic_subscriptions (user_id, topic_id) VALUES('.$pun_user['id'].' ,'.$new_tid.')') or error('Unable to add subscription', __FILE__, __LINE__, $db->error());
294: 294: 
295:                 // Create the post ("topic post")295:                 // Create the post ("topic post")
296:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());296:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.$db->escape(get_remote_address()).'\', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
297:             }297:             }
298:             else298:             else
299:             {299:             {
300:                 // Create the post ("topic post")300:                 // Create the post ("topic post")
301:                 $email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$db->escape($email).'\'' : 'NULL';301:                 $email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$db->escape($email).'\'' : 'NULL';
302:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.get_remote_address().'\', '.$email_sql.', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());302:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape(get_remote_address()).'\', '.$email_sql.', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
303:             }303:             }
304:             $new_pid = $db->insert_id();304:             $new_pid = $db->insert_id();
305: 305: 


a/profile.php b/profile.php
1037:     {1037:     {
1038:         $user['url'] = pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['url']) : $user['url']);1038:         $user['url'] = pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['url']) : $user['url']);
1039:         $user_personal[] = '<dt>'.$lang_profile['Website'].'</dt>';1039:         $user_personal[] = '<dt>'.$lang_profile['Website'].'</dt>';
1040:         $user_personal[] = '<dd><span class="website"><a href="'.$user['url'].'">'.$user['url'].'</a></span></dd>';1040:         $user_personal[] = '<dd><span class="website"><a href="'.$user['url'].'" rel="nofollow">'.$user['url'].'</a></span></dd>';
1041:     }1041:     }
1042: 1042: 
1043:     if ($user['email_setting'] == '0' && !$pun_user['is_guest'] && $pun_user['g_send_email'] == '1')1043:     if ($user['email_setting'] == '0' && !$pun_user['is_guest'] && $pun_user['g_send_email'] == '1')
1783:                         if ($cur_category != 0)1783:                         if ($cur_category != 0)
1784:                             echo "\n\t\t\t\t\t\t\t".'</div>'."\n";1784:                             echo "\n\t\t\t\t\t\t\t".'</div>'."\n";
1785: 1785: 
1786:                         echo "\t\t\t\t\t\t\t".'<div class="conl">'."\n\t\t\t\t\t\t\t\t".'<p><strong>'.$cur_forum['cat_name'].'</strong></p>'."\n\t\t\t\t\t\t\t\t".'<div class="rbox">';1786:                         echo "\t\t\t\t\t\t\t".'<div class="conl">'."\n\t\t\t\t\t\t\t\t".'<p><strong>'.pun_htmlspecialchars($cur_forum['cat_name']).'</strong></p>'."\n\t\t\t\t\t\t\t\t".'<div class="rbox">';
1787:                         $cur_category = $cur_forum['cid'];1787:                         $cur_category = $cur_forum['cid'];
1788:                     }1788:                     }
1789: 1789: 


a/register.php b/register.php
 66: if (isset($_POST['form_sent'])) 66: if (isset($_POST['form_sent']))
 67: { 67: {
 68:     // Check that someone from this IP didn't register a user within the last hour (DoS prevention) 68:     // Check that someone from this IP didn't register a user within the last hour (DoS prevention)
 69:     $result = $db->query('SELECT 1 FROM '.$db->prefix.'users WHERE registration_ip=\''.get_remote_address().'\' AND registered>'.(time() - 3600)) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error()); 69:     $result = $db->query('SELECT 1 FROM '.$db->prefix.'users WHERE registration_ip=\''.$db->escape(get_remote_address()).'\' AND registered>'.(time() - 3600)) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 70:  70: 
 71:     if ($db->num_rows($result)) 71:     if ($db->num_rows($result))
 72:         message($lang_register['Registration flood']); 72:         message($lang_register['Registration flood']);
156:         $password_hash = pun_hash($password1);156:         $password_hash = pun_hash($password1);
157: 157: 
158:         // Add the user158:         // Add the user
159:         $db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, timezone, dst, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$db->escape($email1).'\', '.$email_setting.', '.$timezone.' , '.$dst.', \''.$db->escape($language).'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.get_remote_address().'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error());159:         $db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, timezone, dst, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$db->escape($email1).'\', '.$email_setting.', '.$timezone.' , '.$dst.', \''.$db->escape($language).'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.$db->escape(get_remote_address()).'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error());
160:         $new_uid = $db->insert_id();160:         $new_uid = $db->insert_id();
161: 161: 
162:         // If the mailing list isn't empty, we may need to send out some alerts162:         // If the mailing list isn't empty, we may need to send out some alerts


a/search.php b/search.php
828:         echo "\t\t\t\t\t\t\t\t".'<label><input type="checkbox" name="forums[]" id="forum-'.$cur_forum['fid'].'" value="'.$cur_forum['fid'].'" />'.pun_htmlspecialchars($cur_forum['forum_name']).'</label>'."\n";828:         echo "\t\t\t\t\t\t\t\t".'<label><input type="checkbox" name="forums[]" id="forum-'.$cur_forum['fid'].'" value="'.$cur_forum['fid'].'" />'.pun_htmlspecialchars($cur_forum['forum_name']).'</label>'."\n";
829:     }829:     }
830: 830: 
831:     echo "\t\t\t\t\t\t\t\t".'</div>'."\n";831:     if ($cur_category)
832:     echo "\t\t\t\t\t\t\t".'</fieldset>'."\n";832:     {
 833:         echo "\t\t\t\t\t\t\t\t".'</div>'."\n";
 834:         echo "\t\t\t\t\t\t\t".'</fieldset>'."\n";
 835:     }
 836:     
833:     echo "\t\t\t\t\t\t".'</div>'."\n";837:     echo "\t\t\t\t\t\t".'</div>'."\n";
834:     echo "\t\t\t\t\t\t".'</div>'."\n";838:     echo "\t\t\t\t\t\t".'</div>'."\n";
835: }839: }


a/viewtopic.php b/viewtopic.php
270:                 if ($pun_config['o_censoring'] == '1')270:                 if ($pun_config['o_censoring'] == '1')
271:                     $cur_post['url'] = censor_words($cur_post['url']);271:                     $cur_post['url'] = censor_words($cur_post['url']);
272: 272: 
273:                 $user_contacts[] = '<span class="website"><a href="'.pun_htmlspecialchars($cur_post['url']).'">'.$lang_topic['Website'].'</a></span>';273:                 $user_contacts[] = '<span class="website"><a href="'.pun_htmlspecialchars($cur_post['url']).'" rel="nofollow">'.$lang_topic['Website'].'</a></span>';
274:             }274:             }
275:         }275:         }
276: 276: 
289:         $user_title = get_title($cur_post);289:         $user_title = get_title($cur_post);
290: 290: 
291:         if ($pun_user['is_admmod'])291:         if ($pun_user['is_admmod'])
292:             $user_info[] = '<dd><span><a href="moderate.php?get_host='.$cur_post['id'].'" title="'.$cur_post['poster_ip'].'">'.$lang_topic['IP address logged'].'</a></span></dd>';292:             $user_info[] = '<dd><span><a href="moderate.php?get_host='.$cur_post['id'].'" title="'.pun_htmlspecialchars($cur_post['poster_ip']).'">'.$lang_topic['IP address logged'].'</a></span></dd>';
293: 293: 
294:         if ($pun_config['o_show_user_info'] == '1' && $cur_post['poster_email'] != '' && !$pun_user['is_guest'] && $pun_user['g_send_email'] == '1')294:         if ($pun_config['o_show_user_info'] == '1' && $cur_post['poster_email'] != '' && !$pun_user['is_guest'] && $pun_user['g_send_email'] == '1')
295:             $user_contacts[] = '<span class="email"><a href="mailto:'.$cur_post['poster_email'].'">'.$lang_common['Email'].'</a></span>';295:             $user_contacts[] = '<span class="email"><a href="mailto:'.$cur_post['poster_email'].'">'.$lang_common['Email'].'</a></span>';


hdiff - version: 2.1.0 (modified)