Website Summary Files Commits Branches @commit @diff @stats
path: root / html.c
Commit message (Collapse)AuthorAgeLinesSHA
* html: use buffered stdio
 Eric Wong
2026-09-18-1/+1599e3df
| | | | | | | | | | | | | | | | | | | | | | | | | | | Our generation of HTML triggers many small write(2) syscalls which is inefficient. Time output on a horrible query against my git.git mirror shows significant performance improvement: QUERY_STRING='id=2b93bfac0f5bcabbf60f174f4e7bfa9e318e64d5&id2=d6da71a9d16b8cf27f9d8f90692d3625c849cbc8' PATH_INFO=/mirrors/git.git/diff export QUERY_STRING PATH_INFO time ./cgit >/dev/null Before: real 0m1.585s user 0m0.904s sys 0m0.658s After: real 0m0.750s user 0m0.666s sys 0m0.076s Signed-off-by: Eric Wong <e@80x24.org> Signed-off-by: Alyssa Ross <hi@alyssa.is> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* html: fix handling of null byte
 Peter Prohaska
2022-12-19-1/+1ce2062d
| | | | | | | A return value of `len` or more means that the output was truncated. Signed-off-by: Peter Prohaska <pitrp@web.de> Signed-off-by: Christian Hesse <mail@eworm.de>
* html: html_ntxt with no ellipsis
 Jeff Smith
2017-10-03-21/+117078725
| | | | | | | | | For implementing a ui-blame page, there is need for a function that outputs a selection from a block of text, transformed for HTML output, but with no further modifications or additions. Signed-off-by: Jeff Smith <whydoubt@gmail.com> Reviewed-by: John Keeping <john@keeping.me.uk>
* Simplify http_parse_querystring()
 Lukas Fleischer
2016-10-01-56/+10927b0ae
| | | | | | | | | | | Instead of reimplementing URL parameter parsing from scratch, use url_decode_parameter_name() and url_decode_parameter_value() which are already provided by Git. Also, change the return type of http_parse_querystring() to void since its only caller already ignores the return value. Signed-off-by: Lukas Fleischer <lfleischer@lfos.de>
* ui-shared: prevent malicious filename from injecting headers
 Jason A. Donenfeld
2016-01-14-0/+26513b386
|
* html: remove html_status()
 John Keeping
2015-08-14-7/+0fb2c71f
| | | | | | This is now unused. Signed-off-by: John Keeping <john@keeping.me.uk>
* Remove redundant includes
 John Keeping
2015-08-13-6/+0157f544
| | | | | | | These are all included in git-compat-util.h (when necessary), which we include in cgit.h. Signed-off-by: John Keeping <john@keeping.me.uk>
* html: avoid using a plain integer as a NULL pointer
 John Keeping
2015-03-09-22/+32438bac6
| | | | | | | | | Sparse complains about this table because we use the integer zero as the NULL pointer. Use this as an opportunity to reformat the table so that it always contains 8 elements per row, making it easier to see which values are being set and which are not. Signed-off-by: John Keeping <john@keeping.me.uk>
* html: remove redundant htmlfd variable
 John Keeping
2014-01-12-3/+1fd31aa6
| | | | | | | This is never changed from STDOUT_FILENO, so just use that value directly. Signed-off-by: John Keeping <john@keeping.me.uk>
* Update copyright information
 Lukas Fleischer
2014-01-08-1/+1f7f26f8
| | | | | | | | | * Name "cgit Development Team" as copyright holder to avoid listing every single developer. * Update copyright ranges. Signed-off-by: Lukas Fleischer <cgit@crytocrack.de>
* html.c: die when write fails
 John Keeping
2013-05-22-1/+11fec7cd
| | | | | | | | If we fail to write HTML output once, there's no point carrying on so just write a failure message once and die. By using Git's die_errno function we also let the user know in what way the write failed. Signed-off-by: John Keeping <john@keeping.me.uk>
* html.c: add various strbuf and varadic helpers
 John Keeping
2013-04-08-3/+50fd00d2f
| | | | | | | | | | This adds the fmtalloc helper, html_txtf, html_vtxtf, and html_attrf. These takes a printf style format string like htmlf but escapes the resulting string. The html_vtxtf variant takes a va_list whereas html_txtf is variadic. Signed-off-by: John Keeping <john@keeping.me.uk>
* html.c: Replace strdup() with xstrdup()
 Lukas Fleischer
2013-04-08-5/+23edfd83
| | | | | | | Use the xstrdup() wrapper which already bails out if strdup() returns a NULL pointer. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* Always #include corresponding .h in .c files
 John Keeping
2013-04-08-0/+18f20879
| | | | | | | | | | | | While doing this, remove declarations from header files where the corresponding definition is declared "static" in order to avoid build errors. Also re-order existing headers in ui-*.c so that the file-specific header always comes immediately after "cgit.h", helping with future consistency. Signed-off-by: John Keeping <john@keeping.me.uk>
* html: check return value of write
 Jason A. Donenfeld
2013-03-20-2/+36d7e359
| | | | | | | This squelches a gcc warning. It's also correct that we check to see if there are any partial or failed writes. For now, we just print a warning to stderr. In the future, perhaps it will prove wise to exit(1) on partial writes.
* Mark several functions/variables static
 Lukas Fleischer
2013-03-04-3/+3bafab42
| | | | | | Spotted by parsing the output of `gcc -Wmissing-prototypes [...]`. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* White space around control verbs.
 Jason A. Donenfeld
2013-03-04-7/+7bdae1d8
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* Fix several whitespace errors
 Lukas Fleischer
2013-03-04-39/+3953bc747
| | | | | | | | | | * Remove whitespace at the end of lines. * Replace space indentation by tabs. * Add whitespace before/after several operators ("+", "-", "*", ...) * Add whitespace to assignments ("foo = bar;"). * Fix whitespace in parameter lists ("foobar(foo, bar, 42)"). Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* Merge branch 'stable'
 Lars Hjemli
2011-07-21-2/+2bf8c7a4
|\
| * html.c: avoid out-of-bounds access for url_escape_table
 Eric Wong
2011-07-21-2/+29cae75d
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes a segfault for me with with -O2 optimization on x86 with gcc (Debian 4.4.5-8) 4.4.5 I can reliably reproduce it with the following parameters when pointed to the git.git repository: PATH_INFO='/git-core.git/diff/' QUERY_STRING='id=2b93bfac0f5bcabbf60f174f4e7bfa9e318e64d5&id2=d6da71a9d16b8cf27f9d8f90692d3625c849cbc8' Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* | Merge branch 'stable'
 Lars Hjemli
2011-05-30-1/+352fbcf2
|\|
| * Properly escape ampersands inside HTML attributes
 Lukas Fleischer
2011-05-30-1/+36938232
| | | | | | | | | | | | | | | | | | Ampersands ("&") appearing inside HTML attributes need to be translated to "&amp;". Otherwise, invalid XHTML will be generated at various places, such as at tree views containing links to submodules. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* | Merge branch 'lh/panel'
 Lars Hjemli
2011-05-23-0/+82ffeecb
|\ \ | |/ |/|
| * html.c: add html_intoption()
 Lars Hjemli
2011-03-06-0/+81a64fd2
| | | | | | | | | | | | This is similar to html_option, but for int values. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* | Fix memory leak in http_parse_querystring().
 Lukas Fleischer
2011-05-23-2/+3070e109
| | | | | | | | | | Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* | Fix escaping of paths with spaces
 Jonathon Mah
2011-05-23-4/+67415274
|/ | | | Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Merge branch 'stable'
 Lars Hjemli
2011-03-05-1/+11b09cbd
|\
| * do not infloop on a query ending in %XY, for invalid hex X or Y
 Jim Meyering
2011-03-05-1/+1fc384b1
| | | | | | | | | | | | | | | | | | | | | | When a query ends in say %gg, (or any invalid hex) e.g., http://git.gnome.org/browse/gdlmm/commit/?id=%gg convert_query_hexchar calls memmove(txt, txt+3, 0), and then returns txt-1, so the loop in http_parse_querystring never terminates. The solution is to make the memmove also copy the trailing NUL. * html.c (convert_query_hexchar): Fix off-by-one error. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* | html.c: use '+' to escape spaces in urls
 Lars Hjemli
2010-11-10-2/+2c268032
| | | | | | | | Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* | prefer html_raw() to write()
 Mark Lodato
2010-09-04-9/+9d187b98
| | | | | | | | | | | | | | To make the code more consistent, and to not rely on the implementation of html(), always use html_raw(...) instead of write(htmlfd, ...). Signed-off-by: Mark Lodato <lodatom@gmail.com>
* | Merge branch 'stable'
 Lars Hjemli
2010-08-29-4/+56940b23
|\|
| * html: fix strcpy bug in convert_query_hexchar
 Mark Lodato
2010-08-29-4/+54843478
| | | | | | | | | | | | | | | | The source and destination strings in strcpy() may not overlap. Instead, use memmove(), which allows overlap. This fixes test t0104, where 'url=foo%2bbar/tree' was being parsed improperly. Signed-off-by: Mark Lodato <lodatom@gmail.com>
* | html: properly percent-escape URLs
 Mark Lodato
2010-02-09-4/+32a2c6355
| | | | | | | | | | | | | | | | | | | | | | | | The only valid characters for a URL are unreserved characters a-zA-Z0-9_-.~ and the reserved characters !*'();:@&=+$,/?%#[] , as per RFC 3986. Everything else must be escaped. Additionally, the # and ? always have special meaning, and the &, =, and + have special meaning in a query string, so they too must be escaped. To make this easier, a table of escapes is now used so that we do not have to call fmt() for each character; if the entry is 0, no escaping is needed. Signed-off-by: Mark Lodato <lodatom@gmail.com>
* | html: make all strings 'const char *'
 Mark Lodato
2010-02-08-17/+178aab27f
|/ | | | | | | | None of the html_* functions modify their argument, so they can all be 'const char *' instead of a simple 'char *'. This removes the need to cast (or copy) when trying to print a const string. Signed-off-by: Mark Lodato <lodatom@gmail.com>
* html.c: use correct escaping in html attributes
 Lars Hjemli
2009-01-29-2/+47efcef0
| | | | | | | First, an apostrophe is not a quote. Second, we also need to escape quotes. And finally, quotes are encoded as '&quot;', not '&quote;'. Sighned-off-by: Lars Hjemli <hjemli@gmail.com>
* html.c: add html_url_path
 Lars Hjemli
2008-10-05-0/+1622a597e
| | | | | | | This function can be used to generate properly escaped path-components for links. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* html.c: add html_url_arg
 Lars Hjemli
2008-10-05-0/+16a36a0d9
| | | | | | This function can be used to properly escape querystring parameter values. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Supply status description to html_status()
 Lars Hjemli
2008-08-06-2/+2885096c
| | | | Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Implement plain view
 Lars Hjemli
2008-08-06-0/+5e5da4bc
| | | | | | | This implements a way to access plain blobs by path (similar to the tree view) instead of by sha1. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Add support for cloning over http
 Lars Hjemli
2008-08-06-0/+702a545e
| | | | | | | This patch implements basic support for cloning over http, based on the work on git-http-backend by Shawn O. Pearce. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Print an error if filename is not found in html_include.
 Harley Laue
2008-04-29-1/+5112b208
| | | | | | | | | | Normally when html_include cannot open the file it fails silently and things can be a bit hard to figure out from just looking at apache's log. This will be beneficial for those initially setting up their server with cgit. Signed-off-by: Harley Laue <losinggeneration@aim.com> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Merge branch 'lh/cleanup'
 Lars Hjemli
2008-04-08-19/+7623296ad
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lh/cleanup: (21 commits) Reset ctx.repo to NULL when the config parser is finished Move cgit_parse_query() from parsing.c to html.c as http_parse_querystring() Move function for configfile parsing into configfile.[ch] Add cache.h Remove global and obsolete cgit_cmd Makefile: copy the QUIET constructs from the Makefile in git.git Move cgit_version from shared.c to cgit.c Makefile: autobuild dependency rules Initial Makefile cleanup Move non-generic functions from shared.c to cgit.c Add ui-shared.h Add separate header-files for each page/view Refactor snapshot support Add command dispatcher Remove obsolete cacheitem parameter to ui-functions Add struct cgit_page to cgit_context Introduce html.h Improve initialization of git directory Move cgit_repo into cgit_context Add all config variables into struct cgit_context ...
| * Move cgit_parse_query() from parsing.c to html.c as http_parse_querystring()
 Lars Hjemli
2008-04-08-0/+64e87e896
| | | | | | | | | | | | This is a generic http-function. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
| * Introduce html.h
 Lars Hjemli
2008-03-18-19/+12b1f9b9c
| | | | | | | | | | | | | | | | All html-functions can be quite easily separated from the rest of cgit, so lets do it; the only issue was html_filemode which uses some git-defined macros so the function is moved into ui-shared.c::cgit_print_filemode(). Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* | Merge branch 'stable'
 Lars Hjemli
2008-02-23-15/+5e0572c3
|\ \ | |/ |/| | | | | | | | | * stable: Fix segfault Signed-off-by: Lars Hjemli <hjemli@gmail.com>
| * Fix segfault
 Hiroki Hattori
2008-02-23-15/+5eacde43
| | | | | | | | Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* | Fix html error detected by test-suite
 Lars Hjemli
2007-11-11-1/+12915483
|/ | | | Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Add html_option() function
 Lars Hjemli
2007-10-28-0/+126ec5f36
| | | | | | This is a generic function used to output html "option" tags. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Rename dirlink to gitlink.
 Jeffrey C. Ollie
2007-06-04-1/+1e651cb0
| | | | | | | Git changed from dirlink to gitlink in 302b9282c9ddfcc704ca759bdc98c1d5f75eba2f. Signed-off-by: Jeffrey C. Ollie <jeff@ocjtech.us>
* Add html_include()
 Lars Hjemli
2007-05-18-0/+145e75128
| | | | | | | This is a function used to include external htmlfiles in cgit- generated pages. Signed-off-by: Lars Hjemli <hjemli@gmail.com>