aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/captcha/captcha_gd.php
diff options
context:
space:
mode:
authorIgor Wiedler <igor@wiedler.ch>2011-03-31 20:32:11 +0200
committerIgor Wiedler <igor@wiedler.ch>2011-03-31 20:32:11 +0200
commita40bc114c0f658b62c14a00eda59d57a27fff680 (patch)
tree2dc4a80a01f76bdf3c59a62597db286793e54cfb /phpBB/includes/captcha/captcha_gd.php
parentd70927e5de8151d9d9d556b6ef844af5efab3f7e (diff)
parent564ce6c7f680090c606a6be4d2598dd04b88aab4 (diff)
downloadforums-a40bc114c0f658b62c14a00eda59d57a27fff680.tar
forums-a40bc114c0f658b62c14a00eda59d57a27fff680.tar.gz
forums-a40bc114c0f658b62c14a00eda59d57a27fff680.tar.bz2
forums-a40bc114c0f658b62c14a00eda59d57a27fff680.tar.xz
forums-a40bc114c0f658b62c14a00eda59d57a27fff680.zip
Merge branch 'develop-olympus' into develop
* develop-olympus: [ticket/10112] Replaced a couple occurrences of count() with sizeof()
Diffstat (limited to 'phpBB/includes/captcha/captcha_gd.php')
-rw-r--r--phpBB/includes/captcha/captcha_gd.php54
1 files changed, 27 insertions, 27 deletions
diff --git a/phpBB/includes/captcha/captcha_gd.php b/phpBB/includes/captcha/captcha_gd.php
index b9b0914e0c..15f34aa58f 100644
--- a/phpBB/includes/captcha/captcha_gd.php
+++ b/phpBB/includes/captcha/captcha_gd.php
@@ -112,7 +112,7 @@ class captcha
$noise_bitmaps = $this->captcha_noise_bg_bitmaps();
for ($i = 0; $i < $code_len; ++$i)
{
- $noise[$i] = new char_cube3d($noise_bitmaps, mt_rand(1, count($noise_bitmaps['data'])));
+ $noise[$i] = new char_cube3d($noise_bitmaps, mt_rand(1, sizeof($noise_bitmaps['data'])));
list($min, $max) = $noise[$i]->range();
//$box = $noise[$i]->dimensions($sizes[$i]);
@@ -1669,32 +1669,32 @@ class captcha
'height' => 15,
'data' => array(
- 'A' => $chars['A'][mt_rand(0, min(count($chars['A']), $config['captcha_gd_fonts']) -1)],
- 'B' => $chars['B'][mt_rand(0, min(count($chars['B']), $config['captcha_gd_fonts']) -1)],
- 'C' => $chars['C'][mt_rand(0, min(count($chars['C']), $config['captcha_gd_fonts']) -1)],
- 'D' => $chars['D'][mt_rand(0, min(count($chars['D']), $config['captcha_gd_fonts']) -1)],
- 'E' => $chars['E'][mt_rand(0, min(count($chars['E']), $config['captcha_gd_fonts']) -1)],
- 'F' => $chars['F'][mt_rand(0, min(count($chars['F']), $config['captcha_gd_fonts']) -1)],
- 'G' => $chars['G'][mt_rand(0, min(count($chars['G']), $config['captcha_gd_fonts']) -1)],
- 'H' => $chars['H'][mt_rand(0, min(count($chars['H']), $config['captcha_gd_fonts']) -1)],
- 'I' => $chars['I'][mt_rand(0, min(count($chars['I']), $config['captcha_gd_fonts']) -1)],
- 'J' => $chars['J'][mt_rand(0, min(count($chars['J']), $config['captcha_gd_fonts']) -1)],
- 'K' => $chars['K'][mt_rand(0, min(count($chars['K']), $config['captcha_gd_fonts']) -1)],
- 'L' => $chars['L'][mt_rand(0, min(count($chars['L']), $config['captcha_gd_fonts']) -1)],
- 'M' => $chars['M'][mt_rand(0, min(count($chars['M']), $config['captcha_gd_fonts']) -1)],
- 'N' => $chars['N'][mt_rand(0, min(count($chars['N']), $config['captcha_gd_fonts']) -1)],
- 'O' => $chars['O'][mt_rand(0, min(count($chars['O']), $config['captcha_gd_fonts']) -1)],
- 'P' => $chars['P'][mt_rand(0, min(count($chars['P']), $config['captcha_gd_fonts']) -1)],
- 'Q' => $chars['Q'][mt_rand(0, min(count($chars['Q']), $config['captcha_gd_fonts']) -1)],
- 'R' => $chars['R'][mt_rand(0, min(count($chars['R']), $config['captcha_gd_fonts']) -1)],
- 'S' => $chars['S'][mt_rand(0, min(count($chars['S']), $config['captcha_gd_fonts']) -1)],
- 'T' => $chars['T'][mt_rand(0, min(count($chars['T']), $config['captcha_gd_fonts']) -1)],
- 'U' => $chars['U'][mt_rand(0, min(count($chars['U']), $config['captcha_gd_fonts']) -1)],
- 'V' => $chars['V'][mt_rand(0, min(count($chars['V']), $config['captcha_gd_fonts']) -1)],
- 'W' => $chars['W'][mt_rand(0, min(count($chars['W']), $config['captcha_gd_fonts']) -1)],
- 'X' => $chars['X'][mt_rand(0, min(count($chars['X']), $config['captcha_gd_fonts']) -1)],
- 'Y' => $chars['Y'][mt_rand(0, min(count($chars['Y']), $config['captcha_gd_fonts']) -1)],
- 'Z' => $chars['Z'][mt_rand(0, min(count($chars['Z']), $config['captcha_gd_fonts']) -1)],
+ 'A' => $chars['A'][mt_rand(0, min(sizeof($chars['A']), $config['captcha_gd_fonts']) -1)],
+ 'B' => $chars['B'][mt_rand(0, min(sizeof($chars['B']), $config['captcha_gd_fonts']) -1)],
+ 'C' => $chars['C'][mt_rand(0, min(sizeof($chars['C']), $config['captcha_gd_fonts']) -1)],
+ 'D' => $chars['D'][mt_rand(0, min(sizeof($chars['D']), $config['captcha_gd_fonts']) -1)],
+ 'E' => $chars['E'][mt_rand(0, min(sizeof($chars['E']), $config['captcha_gd_fonts']) -1)],
+ 'F' => $chars['F'][mt_rand(0, min(sizeof($chars['F']), $config['captcha_gd_fonts']) -1)],
+ 'G' => $chars['G'][mt_rand(0, min(sizeof($chars['G']), $config['captcha_gd_fonts']) -1)],
+ 'H' => $chars['H'][mt_rand(0, min(sizeof($chars['H']), $config['captcha_gd_fonts']) -1)],
+ 'I' => $chars['I'][mt_rand(0, min(sizeof($chars['I']), $config['captcha_gd_fonts']) -1)],
+ 'J' => $chars['J'][mt_rand(0, min(sizeof($chars['J']), $config['captcha_gd_fonts']) -1)],
+ 'K' => $chars['K'][mt_rand(0, min(sizeof($chars['K']), $config['captcha_gd_fonts']) -1)],
+ 'L' => $chars['L'][mt_rand(0, min(sizeof($chars['L']), $config['captcha_gd_fonts']) -1)],
+ 'M' => $chars['M'][mt_rand(0, min(sizeof($chars['M']), $config['captcha_gd_fonts']) -1)],
+ 'N' => $chars['N'][mt_rand(0, min(sizeof($chars['N']), $config['captcha_gd_fonts']) -1)],
+ 'O' => $chars['O'][mt_rand(0, min(sizeof($chars['O']), $config['captcha_gd_fonts']) -1)],
+ 'P' => $chars['P'][mt_rand(0, min(sizeof($chars['P']), $config['captcha_gd_fonts']) -1)],
+ 'Q' => $chars['Q'][mt_rand(0, min(sizeof($chars['Q']), $config['captcha_gd_fonts']) -1)],
+ 'R' => $chars['R'][mt_rand(0, min(sizeof($chars['R']), $config['captcha_gd_fonts']) -1)],
+ 'S' => $chars['S'][mt_rand(0, min(sizeof($chars['S']), $config['captcha_gd_fonts']) -1)],
+ 'T' => $chars['T'][mt_rand(0, min(sizeof($chars['T']), $config['captcha_gd_fonts']) -1)],
+ 'U' => $chars['U'][mt_rand(0, min(sizeof($chars['U']), $config['captcha_gd_fonts']) -1)],
+ 'V' => $chars['V'][mt_rand(0, min(sizeof($chars['V']), $config['captcha_gd_fonts']) -1)],
+ 'W' => $chars['W'][mt_rand(0, min(sizeof($chars['W']), $config['captcha_gd_fonts']) -1)],
+ 'X' => $chars['X'][mt_rand(0, min(sizeof($chars['X']), $config['captcha_gd_fonts']) -1)],
+ 'Y' => $chars['Y'][mt_rand(0, min(sizeof($chars['Y']), $config['captcha_gd_fonts']) -1)],
+ 'Z' => $chars['Z'][mt_rand(0, min(sizeof($chars['Z']), $config['captcha_gd_fonts']) -1)],
'1' => array(
array(0,0,0,1,1,0,0,0,0),
90' href='#n290'>290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461
#!/usr/bin/perl

use lib qw(/usr/lib/libDrakX);

# prevent firing up drakbug (doesn't work w/o X11):
BEGIN { $ENV{DISABLE_DRAKBUG} = 1 }

use strict;
use diagnostics;

# fix translating reasons for 2nd stage warning
use lang;
BEGIN {
    my $locale = lang::read($>);
    lang::set($locale);
}

use standalone;     #- warning, standalone must be loaded very first, for 'explanations'
use c;
use common;
use interactive;
use detect_devices;
use harddrake::data;
use harddrake::autoconf;
use harddrake::sound;
use Xconfig::card;
use Xconfig::various;
use modules;
use Storable qw(store retrieve);
use run_program;

# timeout runaway processes after 2mn:
run_program::set_default_timeout(2*60);


my $force = member('--force', @ARGV);
my $reboot_needed;
my $do_udev_settle;

my $invert_do_it = $ARGV[0] eq 'X11' ? 1 : 0;
my ($hw_sysconfdir, $timeout) = ("/etc/sysconfig/harddrake2", $invert_do_it ? 600 : 25);
my $last_boot_config = "$hw_sysconfdir/previous_hw";

$last_boot_config .= '_X11' if $invert_do_it;

# first run ? if not read old hw config
my $previous_config;
if (-f $last_boot_config && -s $last_boot_config) {
    eval { $previous_config = Storable::retrieve($last_boot_config) };
    log::explanations("resetting previous hardware file ($@)") if $@;
}
$previous_config ||= {};
$previous_config = $$previous_config if ref($previous_config) !~ /HASH/;
my $first_run = is_empty_hash_ref($previous_config);

my $modules_conf = modules::any_conf->read;

my $isLaptop = detect_devices::isLaptop();
my $curr_kernel = c::kernel_version();
my ($kernel_major) = $curr_kernel =~ /^(\d+\.\d+)/;

my %previous_kernel_config = getVarsFromSh("$hw_sysconfdir/kernel");
my %previous_xorg_config = getVarsFromSh("$hw_sysconfdir/xorg");
setVarsInSh("$hw_sysconfdir/kernel", { KERNEL => $kernel_major, IS_LAPTOP => bool2text($isLaptop) });
my %cfg = getVarsFromSh("$hw_sysconfdir/service.conf");

# default to 'yes' on upgrade:
$cfg{AUTORECONFIGURE_RIGHT_XORG_DRIVER} = 'yes' if !exists $cfg{AUTORECONFIGURE_RIGHT_XORG_DRIVER};
$cfg{HANDLE_KMS_BOOT_CONFIG} = 'yes' if !exists $cfg{HANDLE_KMS_BOOT_CONFIG};

# autoreconfigure laptop-dependent services when switching from laptop to desktop, and vice versa
if (!exists $previous_kernel_config{IS_LAPTOP} || $force || $isLaptop != text2bool($previous_kernel_config{IS_LAPTOP})) {
    log::explanations("Autoconfiguring laptop tools since we switched between laptop and desktop systems");
    harddrake::autoconf::laptop($isLaptop);
}

my $known_kernels = "$hw_sysconfdir/kernels";
if (!member($curr_kernel, chomp_(cat_($known_kernels)))) {
    harddrake::autoconf::fix_aliases($modules_conf) if !$first_run;
    append_to_file($known_kernels, "$curr_kernel\n");
}

sub dialog_with_timeout {
    my ($type, $title, $msg, $timeout, $plymouth) = @_;
    my ($pid, $res, $timed_out);

    $SIG{ALRM} = sub { $timed_out = 1; kill 15, $pid };
    unless ($pid = fork()) {
	$plymouth and system('plymouth', 'hide-splash');
	exec("/usr/share/harddrake/confirm", $type, $title, $msg);
    }
    alarm($timeout);
    wait();
    $res = $?;
    alarm(0);
    return $res, $timed_out;
}

sub get_xorg_driver() {
    my $x = Xconfig::xfree->read;
    if ($x) {
        my ($dev_section) = grep { $_->{name} eq 'Device' } @{$x->{raw}};
        $dev_section && $dev_section->{l}{Driver}{val};
    }
}

sub schedule_warn_about_switch {
    my ($reason) = @_;
    output('/var/run/harddrake-notify-x11-free-driver-switch', $reason);
}

my $lib = get_libdir();

sub find_xorg_driver {
    my ($new_driver) = @_;
    # nvidia driver has special place:
    -e "/usr/$lib/xorg/modules/drivers/${new_driver}_drv.so"
      || -e "/usr/$lib/xorg/extra-modules/${new_driver}_drv.so";
}

sub after_x_driver_switch() {
    # If a wrong driver is loaded, ask for a reboot.
    my $reboot_needed = -x "/sbin/display_driver_helper" && system("/sbin/display_driver_helper", "--check-loaded") != 0;
    if (!$reboot_needed) {
        # Load any new drivers.
        system("udevadm", "trigger",  "--subsystem-match=pci", "--attr-match=class=0x03*");
    }
    $reboot_needed;
}

sub switch_x_driver {
    my ($old_driver, $new_driver, $reason) = @_;
    if (!find_xorg_driver($new_driver)) {
        log::explanations("would switch X.org driver from '$old_driver' to '$new_driver' ($reason); but new driver is not installed");
        return;
    }
    # This should use calls to Xconfig instead of substitution. However, currently
    # Xconfig probably makes too intrusive changes to xorg.conf when switching the driver.
    cp_af('/etc/X11/xorg.conf', "/etc/X11/xorg.conf.mga$^T");
    substInFile { s!^(\s*Driver\s+)"$old_driver"!$1"$new_driver"!i } '/etc/X11/xorg.conf';
    log::explanations("switch X.org driver from '$old_driver' to '$new_driver' ($reason)");
    Xconfig::card::libgl_config_and_more({ Driver => $new_driver });
    my $kms_changed = Xconfig::various::setup_kms();

    after_x_driver_switch() || $kms_changed; # returns 1 if reboot is needed
}

sub should_reconfigure_x_driver {
    my ($card_data, $device, $current_driver) = @_;
    my $reason;
    my $reconfigure;
    my $new_key = $card_data->{Driver} . $card_data->{Driver2};
    setVarsInSh("$hw_sysconfdir/xorg", { XORG_DRV => $new_key });
    # auto reconfigure x11 only on first time default driver have changed:
    if ($previous_xorg_config{XORG_DRV} ne $new_key) {
	if (!member($current_driver, $card_data->{Driver}, $card_data->{Driver2}, 'fbdev', 'vesa')) {
	    $reason = N("The graphics card '%s' is no longer supported by driver '%s'",
			 $device->{description}, $current_driver);
	    $reconfigure = 1;
	 }
     } elsif ((stat('/etc/X11/xorg.conf'))[9] < (stat('/etc/product.id'))[9]) {
        # when switching to a new release (product.id is newer than xorg.conf),
	# regenerate xorg.conf even if the driver used is vesa or fbdev, this
	# way we handle switches like "no driver for the card in older releases
	# but good driver in new release", see bug #53753
	if (!member($current_driver, $card_data->{Driver}, $card_data->{Driver2})) {
	    $reason = N("New release, reconfiguring X for %s", $device->{description});
	    $reconfigure = 1;
	}
    }

    ($reconfigure, $reason);
}

my @cards = (
    {
        ldetect_driver_regexp => 'Card:NVIDIA',
        xorg_driver_regexp => 'nv.+',
        module_names => [ qw(nvidia.ko nvidia304.ko nvidia340.ko  nvidia390.ko nvidia-current.ko) ]
    },
    {
        ldetect_driver_regexp => 'Card:ATI Radeon',
        xorg_driver_regexp => 'fglrx',
        module_names => [ qw(fglrx.ko fglrx-hd2000.ko) ]
    }
);


my @devices;
@devices = grep { $_->{driver} =~ /^Card:/ } detect_devices::probeall()
       if -f '/etc/X11/xorg.conf';

# do not auto reconfigure if more than one graphic card:
$cfg{AUTORECONFIGURE_RIGHT_XORG_DRIVER} = 'no' if scalar(@devices) > 1;

foreach my $device (@devices) {
    next if !text2bool($cfg{AUTORECONFIGURE_RIGHT_XORG_DRIVER});

    my $id = $device->{driver} =~ /Card:(.*)/ && $1;
    my $card_data = Xconfig::card::readCardsDB("/usr/share/ldetect-lst/Cards+")->{$id};
    my $current_driver = get_xorg_driver(); 

    # nvidia proprietary driver in ldetect-lst can be 'nvidia173', 'nvidia-current', ...
    # but really is just 'nvidia' in xorg.conf:
    $card_data->{Driver2} =~ s/(nvidia).*/$1/;

    # auto reconfigure x11 only on first time default driver have changed:
    my ($should_reconfigure, $reason) = should_reconfigure_x_driver($card_data, $device, $current_driver);
    if ($should_reconfigure) {
	if (-e "/tmp/.X11-unix/X0") {
	    # We are too late, X server is already running.
	    # It was probably speedboot, disable it for next boot.
	    substInFile { s!^$curr_kernel .*\n!! } "/var/lib/speedboot/status" if -e "/var/lib/speedboot/status";
	    # Restore state as we were not able to switch the driver yet.
	    setVarsInSh("$hw_sysconfdir/xorg", { XORG_DRV => $previous_xorg_config{XORG_DRV} });
	} else {
	    $reboot_needed |= switch_x_driver($current_driver, $card_data->{Driver}, $reason);
	    $do_udev_settle = 1;
	    schedule_warn_about_switch($reason) if any { $current_driver =~ $_->{xorg_driver_regexp} } @cards;
	    # Update $current_driver with the new one
	    $current_driver = $card_data->{Driver};
	}
    }

    # nv->nouveau or non_kms_nouveau->kms_nouveau can't have "Disable dri"!
    if ($current_driver eq "nouveau") {
	my $raw_x = Xconfig::xfree->read;
	if ($raw_x) {
	    if (member("dri", $raw_x->get_disabled_modules)) {
		$raw_x->remove_disable_module("dri");
		$raw_x->write;
	    }
	}
    }
}


foreach my $card (@cards) {
    my $device = find { $_->{driver} =~ /$card->{ldetect_driver_regexp}/ } @devices;
    next if !$device;
    
    if (find { -e join('', "/lib/modules/", c::kernel_version(), $_) }
          map { ("/dkms/$_", "/dkms-binary/$_", "/kernel/$_") } map { "/drivers/$_" } map { ("extra/$_", "video/$_", "char/$_", "char/drm/$_") } map { $_, "$_.xz", "$_.gz" } @{$card->{module_names}}) {

        # do not automatically switch from nv to nvidia (in order to handle
        # cases where nvidia module crashes the system):
        #
        # substInFile {
        #    log::explanations("switch XFree86 driver from nv to nvidia") if /Driver "nv"/;
        #    s!Driver "nv.*"!Driver "nvidia"!g;
        #    s!#*( Load.*glx)!\1!g;
        # } $_ foreach "/etc/X11/XF86Config-4", "/etc/X11/XF86Config";
    } else {
        my @cards = Xconfig::card::probe();
        my $driver = $cards[0]{Driver};
        my $old_driver = cat_('/etc/X11/xorg.conf') =~ /Driver "($card->{xorg_driver_regexp})"/ && $1;
        if ($old_driver) {
            my $reason = N("The proprietary kernel driver was not found for X.org driver '%s'",
                           $old_driver);
            $reboot_needed |= switch_x_driver($card->{xorg_driver_regexp}, $driver, $reason);
            $do_udev_settle = 1;
            schedule_warn_about_switch($reason);
        }
    }
}

my $is_globetrotter = -f '/usr/sbin/mdkmove';

my (%config, $wait);
my $in;
my $plymouth = -x '/bin/plymouth';

# For each hw, class, detect device, compare and offer to reconfigure if needed
foreach my $hw_class (@harddrake::data::tree) {
    my ($Ident, $item, $configurator, $detector, $do_it) = @$hw_class{qw(class string configurator detector checked_on_boot)};
    next if member($cfg{"DETECT_$Ident"}, qw(NO no));

    $configurator ||= $hw_class->{configurator};

    next unless $do_it ^ $invert_do_it;
    # No detector ? (should never happen but who know ?)
    ref($detector) eq 'CODE' or next;

    my %ID = map {
        my $i = $_;
        my $id = defined $i->{device} ? $i->{device} : join(':', map { $i->{$_} } qw(vendor id subvendor subid));
        $id => $i;
    } eval { $detector->({}) };
    $config{$Ident} = \%ID;
    next if !$is_globetrotter && !$force && $first_run; # do not fsck on first run but if --force

    my $oldconfig = $force ? {} : $previous_config->{$Ident};

    my $msg;
    my @was_removed = difference2([ keys %$oldconfig ], [ keys %ID ]);
    if (@was_removed) {
     $msg .= N("Some devices in the \"%s\" hardware class were removed:\n", $item) .
       join('', map { N("- %s was removed\n", harddrake::data::custom_id($oldconfig->{$_}, $item)) } @was_removed) . "\n";
    }
    my @added = difference2([ keys %ID ], [ keys %$oldconfig ]);
    $msg .= N("Some devices were added: %s\n", $item) if @added;
    $msg .= N("- %s was added\n", harddrake::data::custom_id($ID{$_}, $item)) foreach @added;