aboutsummaryrefslogtreecommitdiff
path: root/tests
AgeCommit message (Collapse)Author
2026-07-17Merge pull request #17280 from Shadowghost/remove-image-override-hackBond-009
Remove episode image override hack
2026-07-17Merge pull request #17191 from IDisposable/fix/handler-path-traversalBond-009
Fix path transversal exposure in Plugins
2026-07-17Added verbose, rambling, log warning to help users with config issues ↵WizardOfYendor1
(hoping to reduce false issues reports). Also added a test to exercise it, which is perhaps silly but convenient.
2026-07-17Append base URL if the published server URL override omits it. Fleshed out ↵WizardOfYendor1
unit tests to cover that and https->http reverse proxy scenario(s).
2026-07-17fix: don't throw ArgumentNullException on partial UpdateItem payloads (#17366)zerafachris
BaseItemDto.Genres, .Tags, and .ProviderIds are plain auto-properties with no default initializer, so they deserialize to null when a client omits them from a partial POST /Items/{itemId} body. The OpenAPI spec documents every BaseItemDto field as optional, but ItemUpdateController.UpdateItem fed these three properties straight into Distinct()/Select()/ToList() without a null check, so a request that (for example) only sets Tags throws ArgumentNullException("source") once it reaches the unguarded Genres line, before Tags is even processed. Guard all three assignments with the same "if (request.X is not null)" pattern already used for the neighboring Studios/Taglines/ProductionLocations fields in this method, so omitted fields are left unchanged instead of crashing the request. Adds ItemUpdateControllerTests covering the reported repro (only Tags supplied) and a companion case asserting existing Genres/ProviderIds are preserved when omitted from the payload. Signed-off-by: zerafachris <christopher.zerafa@blocklabs.io>
2026-07-17Prevent unauthenticated re-run of the startup wizard on misconfigurationShadowghost
2026-07-17Harden remaining path-construction sinks against traversalShadowghost
2026-07-17Sanitize media attachment and lyric paths against traversalShadowghost
2026-07-17Sanitize ClientLog upload filename to prevent path traversalShadowghost
2026-07-17Skip corrupt KeyframeData rows during full system backupzerafachris
A single row with malformed KeyframeTicks JSON (e.g. a truncated array from an interrupted write) currently aborts the entire backup, because the try/catch in BackupService.CreateBackupAsync only wraps serialization of an already-materialized entity, not the enumeration itself. EF Core throws JsonReaderException from MoveNextAsync() while materializing the corrupt row, which propagates past that catch block. Switch to manual enumerator iteration so MoveNextAsync() failures can be caught per-row, logged as a warning identifying the affected table, and skipped, allowing the remaining rows and the rest of the backup to complete. Fixes #17216 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16Fix tie-breaker performanceShadowghost
2026-07-15Move GetUserDataBatch to use ResolveUserDataRow when item.UserData isn't ↵Jordan Rushing
preloaded
2026-07-15Fix SchedulesDirect image limit recognitionShadowghost
2026-07-15Fix race condition in concurrent subtitle conversionPiotr Niełacny
SubtitleEncoder.ConvertSubtitles parsed subtitles with libse's static Subtitle.Parse, which iterates a statically cached list of shared SubtitleFormat instances. Format parsers keep mutable per-parse state on the instance, so concurrent subtitle requests corrupted each other's output (cues mixed across streams and languages, truncated files) or failed with NullReferenceException when format detection broke down and Subtitle.Parse returned null. Parse through the injected ISubtitleParser instead. SubtitleEditParser instantiates a fresh format parser per call, so requests no longer share state. Its Parse method now returns the libse Subtitle directly (the SubtitleTrackInfo flattening was unused since the SubtitleEdit writer rework) so the writers keep full fidelity such as ASS styling.
2026-07-14remove PlaybackPositionTicks from MediaSourceInfoShadowghost
2026-07-13Fix: Fetch the correct row matching the most up to date fileJordan Rushing
2026-07-12Fix 3D format detection when the tag is the last token of the pathTowyTowy
Format3DParser drops the last character of the final path token: when IndexOfAny finds no more delimiters, the slice is taken with 'index = path.Length - 1', so e.g. "hsbs" is compared as "hsb" and never matches any rule. File paths are unaffected because the extension is always the final token, but directory based media have no extension. For DVD/BluRay folder rips (BaseVideoResolver parses the folder path via Set3DFormat), a trailing 3D tag such as "Gravity (2013) 3d hsbs/BDMV" is silently ignored and Video3DFormat is never set. This is a regression from 42a2cc174 which replaced the string.Split based FlagParser with span slicing; the Split implementation kept the final token intact. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10Add Live TV published URL regression coverageWizardOfYendor1
2026-07-10Resolve Live TV client stream URLs per requestWizardOfYendor1
2026-07-10Fix host and port handling for published server URI overridesWizardOfYendor1
2026-07-09Fix profile image being impossible to clear when its in-memory key is temporaryTowyTowy
ClearProfileImageAsync removed the ProfileImage instance attached to the passed-in User, but that instance can carry a stale, never-persisted (temporary) key because UpdateUserAsync creates the persisted image on a separately loaded entity and never copies the generated key back. Removing that detached entity on a fresh DbContext made EF Core throw InvalidOperationException ('ImageInfo.Id has a temporary value'), leaving the profile image impossible to delete or replace. Load the tracked, persisted user and remove its actual ProfileImage, matching the removal pattern already used in UpdateUserAsync. Adds regression tests covering the temporary-key case and the no-image no-op (the first fails before this change and passes after). Fixes #13137 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09Cleanup PreferEpisodeParentPoster)Shadowghost
2026-07-09Remove episode image override hackShadowghost
2026-07-07Added more aliases for attributesJakub Schmidtke
Adds tvdb alias for tvdbid and imdb alias for imdbid. It also fixes an issue where tmdb alias was being ignored if it was followed by something like "tmdbidfoo". The same issue prevented imdb pattern matching from working, if it was followed by something like "imdbidfoo". It also allows for detecting the first matching occurence, whether it was an alias or not. Finally, it ignores attributes with values consisting of only whitespaces.
2026-07-05Merge pull request #17044 from Shadowghost/version-model-and-handlingCody Robibero
Fixes for multi version handling
2026-07-04Fix play queue index handling in SyncPlayEnea D'Angiò
Three index bugs in PlayQueueManager, two of which leave PlayingItemIndex out of bounds, making every subsequent Buffering/Ready request throw and leaving the group unusable until it empties: - RemoveFromPlaylist did not compensate for removed items preceding the playing item: removing the playing item together with earlier items could select the wrong item or crash with an out-of-bounds index. - Next/Previous on an empty playlist with RepeatOne/RepeatAll reported success or set PlayingItemIndex to 0 on an empty list, crashing downstream in Group and corrupting the index. - SetPlayingItemByIndex accepted an index equal to the playlist count (latent off-by-one, callers currently pre-validate).
2026-07-03Allow changing capitalization of usernamesBond_009
Fixes #17195 Adds a regression test
2026-07-03Match VobSub MKS subtitle profiles by containeraltqx
2026-07-02Close sessions for lost WebSockets to prevent zombie SyncPlay groups (#17079)Enea D'Angiò
Close sessions for lost WebSockets to prevent zombie SyncPlay groups
2026-07-02Fix review commentsShadowghost
2026-06-29Merge pull request #17170 from Shadowghost/better-bitratesBond-009
Rework bitrate reporting
2026-06-28Add testsMarc Brooks
Also fixed a sibling directory that matches the prefix.
2026-06-27Merge pull request #17013 from dfederm/dfederm/fix-jellyfin-16899Cody Robibero
Reject unsafe plugin package names in installer
2026-06-27Merge pull request #16914 from danieltutuianu/fix/livetv-channel-icon-refreshCody Robibero
Live TV: re-fetch channel icons on guide refresh
2026-06-26Fix localization lookupShadowghost
2026-06-25Add TMDb missing episode providerShadowghost
2026-06-23Rework bitrate reportingShadowghost
2026-06-21Fix audio sample rate forced to 48 kHz for non-Opus codecsdanne
GetProgressiveAudioFullCommandLine applied the libopus-only sample rate quantization to every codec except Opus, inverting the intended guard. A requested rate such as 44100 Hz was therefore snapped to 48000 Hz for AAC/MP3/FLAC, while Opus (which actually requires the quantization) was skipped entirely. Apply the quantization only when the output codec is Opus, and pass the requested sample rate through unchanged for all other codecs. Fixes #17026 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19Surface the played version for resumeShadowghost
2026-06-18Merge pull request #14935 from JadedRain/masterBond-009
Fixed "Deleting media that is still being watched in SyncPlay results in errors"
2026-06-18Merge pull request #17099 from Bond-009/libraryimportBond-009
Follow native interoperability best practices
2026-06-17Merge pull request #17087 from dkanada/book-resolverBond-009
improve book resolution from filename
2026-06-17Merge branch 'master' into fix/livetv-channel-icon-refreshDaniel Țuțuianu
Resolve GuideManager conflict by keeping LiveTvChannelImageHelper so channel icons re-fetch on every guide refresh, including when the URL is unchanged.
2026-06-16Make sure we don't include the null terminatorBond_009
2026-06-15Add regression testBond_009
2026-06-15Follow native interoperability best practicesBond_009
https://learn.microsoft.com/en-us/dotnet/standard/native-interop/best-practices
2026-06-15Fix testsShadowghost
2026-06-15improve book resolution from filenamedkanada
2026-06-12Fix performanceShadowghost
2026-06-10Merge remote-tracking branch 'upstream/master' into version-model-and-handlingShadowghost