You are on page 1of 87

(or how I got hooked to Joomla's bug patching process)

Bugs, Patches and other abnormalities

Peter Martin, twitter: @pe7er www.joomladay.org.za, Fri 18th Oct 2013

Overview Presentation
a)Introduction b)Bugs & Patches c) My bug d)Pizza, Bugs (and Beer) and Fun e)Bugtracker Process f) Testing, Testing, 1, 2, 3 g)Questions?

>>>Sheetsvia:www.db8.nl<<<

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Your involvement in Joomla Community? Last year (2012) Joomladay Cape Town Presentation: How to contribute to the Joomla community Coding skills are not necessary to help out in the Joomla! community! There are a lot of different areas, outside the field of programming, where people are helping out at Joomla.org.

Joomladay 2013 South Africa

Technical Joomla support

Joomladay 2013 South Africa

Extensions

Joomladay 2013 South Africa

Documentation

Joomladay 2013 South Africa

Languages

Joomladay 2013 South Africa

Magazine

Joomladay 2013 South Africa

Real Life Meetings

Joomladay 2013 South Africa

Share your Websites

Joomladay 2013 South Africa

Improve Joomla

Joomladay 2013 South Africa

b) Bug & Patches

Joomladay 2013 South Africa

A Software Bug
Error

in computer program
Incorrect or unexpected result, or unintended behaviour Mistakes made by people in source code

Joomladay 2013 South Africa

Joomla Source Code


index.php line 1-30
<?php /** *@packageJoomla.Site * *@copyrightCopyright(C)20052013OpenSourceMatters,Inc.Allrightsreserved. *@licenseGNUGeneralPublicLicenseversion2orlater;seeLICENSE.txt */ if(version_compare(PHP_VERSION,'5.3.1','<')) { die('YourhostneedstousePHP5.3.1orhighertorunthisversionofJoomla!'); } /** *Constantthatischeckedinincludedfilestopreventdirectaccess. *define()isusedintheinstallationfolderratherthan"const"tonoterrorforPHP5.2 andlower */ define('_JEXEC',1); if(file_exists(__DIR__.'/defines.php')) { include_once__DIR__.'/defines.php'; } if(!defined('_JDEFINES')) { define('JPATH_BASE',__DIR__); require_onceJPATH_BASE.'/includes/defines.php'; }

Joomladay 2013 South Africa

Source Code Small Bug


index.php
require_onceJPATH_BASE.'/includes/framework.php'; //MarkafterLoadintheprofiler. JDEBUG?$_PROFILER>mark('afterLoad'):null; //Instantiatetheapplication. $app=Jfactory::getApplication('site'); //Initialisetheapplication. $app>initialise(); ug b gbug ubug bugbugbg bugbugbugbu bugbugbugbugbugbugbug bugbugbugbugbugbugbugbugbugbugb bugbugbugbugbugbugbugbugbugbugbu bugbugbugbugbugbugbugbugbugbugbugbugbu bugbugbugbug bugbugbugbugbugbugbugbugbugbugbugbugbu bugbugbugbugbugbugbugbugbugbugbu bugbuggbugbugbugbugbugbugbugbugb bugbugbugbugbugbugbug bugbugbugbu bugbugbg ubug gbug b ug

Joomladay 2013 South Africa

Source Code Big Bug


index.php
//MarkafterIntialiseintheprofiler. JDEBUG?$_PROFILER>mark('afterInitialise'):null;
""$oo$"" ""$oo$"o "$""""o"o$"o"""$" "$o"$o"$o"$o$" "$o$$$o$$$$o$$$$$" "ooooo""""$$$$$$$$""o""oooooo" "$$$$$$oo"oo$$$o"o$$$$oo"o$$$o"o$$$$$$$ "$$$$$$$$$$ooo$$$$$$$$$o"$" $$$$$$$$$$o$$$$$$"$$o"o $$$$$o$$$$$$$$$$$$$$$$$o"o $$$$$$$$$$$""$$$$$$$$$$$$ $o""""""""""""""""""$" $o$$$$$"""$$$$$"$$$$$""$$$$$ooo"o $o"$o$$$$$$$$oo$$$$$$$$o$$""$ oo$"$$$$$$$$$$$$$$$$$$$$"o"o$oo o$$$"$$$o"o$$$$$$$"""$$$$$$$o$$$$$$oUNBUG o$$$$"$$$$$o"$$$$$ooo$$$$$$"o$$$$$$$$$$ o$$""$$$$$$o""$$$$$$$$$$$$$oo$$$$$o$""$$ $$"$$$$"o"o$$$$$$$$$$$$""$$$$$$o o$$"o$$"$$$$$$$$$$$"o"$$$$$$ $$$oo$$o""$$""$$$o"$"o$o$$$o o$$$$o$$$"o"$oo$$$$o"o$o$$$$$oo$$$$$o$$$$ $$$$$$$$"$$$$$$""$$o$$$"""$$$$"o""$$$o"$$$o $$$"o"""$$$$oo$$$$o"$$o$$$"o"""""$o$$$ o$"$$$$"$""o$"o"$$o$$$$"$$"o"o$$"$oo $"$$o$"oo$"o$$$"o$o"$$$$o"o"$$$""$o $$$$$o"o$$o$"$$"$$o$$o$$"$$o"$$$""o $$$""$$$$$$$$$$$$$$"$$$$$$ $$$$$$$$"$$$o$$""$$$ $$$$"$$$"""$$$$ $$"""$$ oo$"$ooo $"$$

Joomladay 2013 South Africa

Source Code Very Big Bug


index.php
//Routetheapplication. $app>route(); //MarkafterRouteintheprofiler. JDEBUG?$_PROFILER>mark('afterRoute'):null; ....oooo.....ooo... .odSS4PYYYSSOOXXXXXXXXXOodbgooo. /SSYod$$$$SSOIIPXXXXXXXXXYYP.oo.*b. ($$Yd$$$$SSSOII:XXXXXXXX:IIoSSS$$b.Y, \Yd$$$$SSSOII:XXXXXXXXXX:IIOOSSS$$$b\ d$$$$SSSOOI:XP"YXXXXXXXX:IIOOSSSS$$$\ Y$$$SSSOOII:XbdXXXXXP"YX:IIOOOSS$$$$) 'Y$$$SSSOI:XXXXXXXXXbodX:IIOOSS$$$$$/ "Y$$$SSSOI(PoTXXXXXTo)XXIIOOOSS$$$*' ""*Y$S(((PXXXXXXXY))dIIOSSS$$dP' "*'()P;XXXXXXXXY)IIOSSS$P".oS, (S'(P;XXXXXXXP;Y)XXYOP".oSSSSb (S'(P;'XXXXXXX';Y).ooooSSSSSSSS) (S'(P;'XXXXXXP';Y).oSSSSSSSSSSSP (SS'Y);YXXXXX';(Y.oSSSSSSSSSSSSP YSS'Y)'YXXX".(Y.oSSP.SSSSSSSSY YSS'""XXX""oooSSP.SSSSSSSSY SSSSSSYXXX:SSSSP.SSSSSSSSY SSSSSPYxb:SSSP.S"SSSSSSP S(OO)SYXb:SY)SSSSS SSSSO)YXb.IISSSSP YSSSYI."YXXbY(SS)I )SSS(dSSo.""*bYSSSY OooSbdSSSSP)SSS( dSSSYOooSS OooSP

Joomladay 2013 South Africa

A Software Patch
Piece

of software designed to fix problems


Fixing error messages Fixing security vulnerabilities Improving the usability or performance

.diff

patch

Differences with previous version

Joomladay 2013 South Africa

Managing Bug Reports & Patches


Software

application to keep track of reported software bugs


Report Communicate Share Patches Status Statistics versioning software repository & versioning
Joomladay 2013 South Africa

git

github.com

Joomla & Patches


Joomla

1.5 = EOL

No Patches No new Features

Joomla

2.5 = LTS

Patches No new Features

Joomla

3.x = STS

Patches New Features

Joomladay 2013 South Africa

c) My Bug

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

My Bug
February

7th 2013, around 10:00 o'clock Joomla 3.0.3

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Installation procedure, step 3

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Reporting the Bug


Not

a real bug, but confusing...

February

7th 2013, 10:29 http://joomlacode.org/gf/project/joomla/tracker/? action=TrackerItemEdit&tracker_item_id=30077

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Reporting the Bug

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Creating a Solution
Local

Joomla site Tried to add functionality to the code


February

7th 2013, 11:38 Added my solution as proof-of-concept to: http://joomlacode.org/gf/project/joomla/tracker/? action=TrackerItemEdit&tracker_item_id=30077

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Creating a Solution
February

2013: Couple of remarks & suggestions 27th 2013: can not download sample.php. Please zip it.

March

Joomlacode.org doesn't accept .php (security!)

April

2013: Couple of remarks & suggestions .. 2013:


Joomladay 2013 South Africa

May

Peter Martin joomladagen.nl 20+21 april 2013

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Creating a Solution
Saturday

June 1st 2013: Joomla Bug Squad Night at JandBeyond in Noordwijkerhout, Netherlands http://www.youtube.com/watch?v=v6YdZJtzJxo

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Creating a Solution
Installed

GitHub Tested options with installing Joomla Made the changes I suggested Created a diff patch (Thanks Andrea Tarr!) Added .diff patch to Issue Tracker
Saturday

latest Joomla (master branch) from

June 2nd 2013, 00:30 I've created a patch 30077.patch ready to test.

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Creating a Solution
Saturday

June 2nd 2013, regarding patch 30077

00:54 @test (Hans Kuijpers) 00:56 @test (Olaf Offick) patch tested successfully 01:05 @test (Mike Veeckmans) tested succesfully #jab13 01:05 Multiple good tests - moving to rtc (Andrea Tarr)

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Creating a Solution
Saturday

June 2nd 2013, regarding patch 30077

01:31 Merged at https://github.com/joomla/joomlacms/commit/37843e88ceae995ffa73f245f7abcd45d01 5cb9a (Michael Babker)

Got

further improved by other people:

Version information got removed (Jean-Marie Simonet) Better looking tooltips

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Creating a Solution Joomla 3.1.5

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

My Bug

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

d) Pizza, Bugs (and Beer) and Fun

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

"Pizza, Bugs and Fun"


Friday, July 12, 2013

Worldwide Netherlands (Eindhoven): Josien Verreijt, Marijke Stuivenberg, Roland Dalmulder & me

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Joomladay Germany 2013


Sunday

September 15th 2013 Bug Squashing und Accessibility Codesprint (David Jardin & David Hurley)

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Joomladay UK 2013
Saturday

October 5th 2013 Joomla BugSquashing session (Javier Gmez)

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

e) The Bugtracker Issue Tracker

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Status: 1.Open 2.Confirmed 3.Pending 4.Ready to commit 5.Fixed in SVN/GitHub

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

BT Process: 1. Open
New

bug?

Reproduce with Joomla Master Branch Report: Add new Tracker Item
Category Status:

Open Build: master How to reproduce... Summary & Details (PHP / Browser / Database / Webserver)

Peter Martin joomladagen.nl 20+21 april 2013

Tracker Team

Joomladay 2013 South Africa

BT Process: 2. Confirmed
Confirmed

bug?

Other people reproduce the error with Joomla Master Branch Develop patch

Peter Martin joomladagen.nl 20+21 april 2013

Coding Team

Joomladay 2013 South Africa

BT Process: 3. Pending
Patch

for bug Needs to be tested:


Test bug before applying patch Apply patch Test if bug has been solved Test if no new bugs have been introduced

Peter Martin joomladagen.nl 20+21 april 2013

Testing Team

Joomladay 2013 South Africa

BT Process: 4. Ready to Commit


Patch

for bug

Two successful tests:


Comment:

@test Comment: @test

Ready To Commit (RTC)

Peter Martin joomladagen.nl 20+21 april 2013

Testing Team

Joomladay 2013 South Africa

BT Process: 5. Fixed in SVN/GitHub


RTC

Commit Patch

= Merged with Joomla Master Branch

Peter Martin joomladagen.nl 20+21 april 2013

PL Team +

Joomladay 2013 South Africa

Playing Bugs & Patches


After Presentation (during break): Find matching!

1. Matching = 2. 3. 1st 4. 2nd 5. RTC for that Bug for that Patch for that Patch for that Patch
Joomladay 2013 South Africa

f) Testing, Testing, 1, 2, 3

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Needed


Local

Webserver

XAMP/MAMP/LAMP Distributed revision control and source code management (sort of Wikipedia for source code)

Git

Joomla

Master Branch

Latest Joomla version with all patches & new features https://github.com/joomla/joomla-cms/ Chrome (incl Inspector) of FireFox + FireBug addon

Browser

(Integrated

Development Environment (IDE))


Joomladay 2013 South Africa

Peter Martin joomladagen.nl 20+21 april 2013

Testing Patches Getting Joomla


in/var/www/ $gitclonehttps://github.com/joomla/joomlacms Cloningintojoomlacms... remote:Countingobjects:381082,done. remote:Compressingobjects:100%(128076/128076),done. remote:Total381082(delta271874),reused357127 (delta249654) Receivingobjects:100%(381082/381082),95.79MiB| 5.79MiB/s,done. Resolvingdeltas:100%(271874/271874),done. Joomlawebsite:/var/www/joomlacms/

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Installing Joomla


Browser

Navigate to http://localhost/joomla-cms/

Normal

All

installation, but:
Joomla components / Modules accessible from menu

Sample Data: Test English (GB) Sample Data Do NOT Remove Installation Folder!!

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Installing Joomla

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Example


Bug: /administrator/components/com_banners/models/banner.php Hardcoded SQL in line 511: $db = Jfactory::getDbo(); $db->setQuery('SELECT MAX(ordering) FROM #__banners'); $max = $db->loadResult();

Joomlacode: [#32194] Banner model has hardcoded SQL

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Example

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Example


Joomlacode: [#32194] Banner model has hardcoded SQL
Github.com: patch [#2200] Replace hardcoded SQL $db->setQuery('SELECT MAX(ordering) FROM #__banners'); with $query object: $db = Jfactory::getDbo(); $query = $db->getQuery(true) ->select('MAX(ordering)') ->from('#__banners'); $db->setQuery($query); $max = $db->loadResult();

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Example


Github: https://github.com/joomla/joomla-cms/pull/2200

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Example


Travis: https://travis-ci.org/joomla/joomla-cms/builds/12365303

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Example


Joomlacode: [#32194] Banner model has hardcoded SQL
Patch: https://github.com/joomla/joomla-cms/pull/2200.diff

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Example


[#32194] Banner model has hardcoded SQL

Before:

$curlhttps://github.com/joomla/joomlacms/pull/2200.diff|gitapply
%Total%Received%XferdAverageSpeedTimeTimeTimeCurrent DloadUploadTotalSpentLeftSpeed 1006911006910014480::::::1930

After:

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches git Commands


Check

Patch

curl https://github.com/joomla/joomlacms/pull/2200.diff | git apply --check

Apply

Patch Patch

curl https://github.com/joomla/joomlacms/pull/2200.diff | git apply curl https://github.com/joomla/joomlacms/pull/2200.diff | git apply -R

Remove

Check

if Patch is removed:

git status
# On branch master nothing to commit (working directory clean)

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches git Commands


Hard

reset remove all changes

git reset --hard HEAD

Info

about all changes, commits, etc

git log git log --pretty=oneline

Joomla

Master Branch = dynamic, Get new changes:


git pull

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

That was easy? Or not.....

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches git too difficult?

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Component


http://docs.joomla.org/Component_Patchtester_for_Testers

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Component

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Component

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Component

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Component

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Testing Patches Component

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

The

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Questions?
Presentation

available at www.db8.nl

Peter Martin e-mail: info at db8.nl website: www.db8.nl twitter: @pe7er

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Credits 1/2

Photos First Aid Plaster 1 - Gokhan Okur http://www.sxc.hu/photo/782775 Moth - Therese Branton http://www.sxc.hu/photo/901692 ASCII Bugs: http://www.asciiworld.com/ Executivo 3 - Ivan Soares Ferrer http://www.sxc.hu/photo/215592 Joomla Sticker + Stroopwafel photo - Paul Orwig Night moth - Irina Naumets http://www.sxc.hu/photo/1047402 Bandaid Bandage - Pam Roth http://www.sxc.hu/photo/291573 JAB13 Bug Squad, Pizza, Bugs & Fun (Eindhoven, NL), JDDE13 Bug Squashing photos - Peter Martin JDUK13 Bug Squashing photos - Paul Orwig Moth 1 - Irina Naumets http://www.sxc.hu/photo/1059828

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

Credits 2/2

Count on us - Laura Leavell http://www.sxc.hu/photo/1206290 Checkbox - bzuko22 http://www.sxc.hu/photo/1335487 Hands: Thumbsup - J. Henning Buchholz http://www.sxc.hu/photo/238119 Multimeter - Maxime Perron Caissy http://www.sxc.hu/photo/498477 mathematic formulas - Tomasz A. Poszwa http://www.sxc.hu/photo/214561 signs signs - Jason Antony http://www.sxc.hu/photo/751034 Sources: Bug Tracking Process - Marijke Stuivenberg http://tinyurl.com/slides-PBFnl Werken met de Joomla Master Code - Roland Dalmulder http://tinyurl.com/handleiding-PBFnl

Peter Martin joomladagen.nl 20+21 april 2013

Joomladay 2013 South Africa

You might also like